赛氪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;
}