算法设计与编程 进制转化

94 阅读1分钟

赛氪OJ-专注于算法竞赛的在线评测系统 (saikr.com)

好家伙,把各个进制转10进制板子快写完了,太蠢了这种方法,因为不可能把所有的进制全部枚举完。

#include <bits/stdc++.h>
using namespace std;
int n, t;
vector<char>v, v2;


//16进制转10进制
void jinzhi16(string x, int D) {
	int index = 0, temp = 0, sum = 0;

	v2.clear();
	for (int i = 0; i < x.size(); i++) {
		//如果是ABCDEF需要先转化为10,11,12,13,14,15
		if (!isdigit(x[i])) {
			index = i;
			temp = x[i] - 'A' + 10;
		}
	}

	int j = 0;
	for (int i = x.size() - 1; i >= 0; i--) {
		if (j == index) {
			sum += temp * pow(16, j);
		} else {
			sum += (x[i] - '0' ) * pow(16, j);
		}

		j++;
	}
	cout << sum << endl;
}

//10进制转10进制 哈哈  
void jinzhi10(string x, int D) {
	int sum = 0;
	v.clear();
	for (int i = 0; i < x.size(); i++) {
		v.push_back(x[i]);
	}

	for (auto &it : v)
		sum = sum * 10 + it - '0';

	cout << sum << endl;;
}

//2进制转10进制
void jinzhi2(string x, int D) {
	int j = 0, sum = 0;
	int len = x.size() - 1;
	for (int i = x.size() - 1; i >= 0; i--) {
		if (x[i] == '1') {
			sum += pow(2, len - i);
		}
	}
	cout << sum << endl;
}

void sovel() {
	int d;
	string x;
	cin >> d >> x;

	if (d == 16) {
		jinzhi16(x, d);
	} else if (d == 2) {
		jinzhi2(x, d);
	} else if (d == 10) {
		jinzhi10(x, d);
	}
}

int main() {
	cin >> t;
	while (t--)
		sovel();
	return 0;
}