题解 | #数制转换#
数制转换
https://www.nowcoder.com/practice/8ef02ef8571b417d8c311a87861f7a03
//a-f|A-F用数组下标解决,这个想法很好
#include "stdio.h"
#include "string"
#include "math.h"
#include "algorithm"
using namespace std;
int main(){
int num1,num3;//num1为原进制,num3为转换后的进制
char num2[30];
string change = "0123456789ABCDEF";//eg:A的下标为10,所以A代表10
scanf("%d %s %d",&num1,num2,&num3);
string str = num2;
for (int i = 0; i < str.size(); ++i) {
if (str[i] >= 'a' && str[i] <= 'z')
str[i] -= 32;
}
int sum = 0;
for (int i = str.size()-1; i >= 0; --i) {//计算出对应的十进制
for (int j = 0; j < change.size(); ++j) {
if (change[j] == str[i]){//change的下标j即为当前位的数字
sum += j*pow(num1,str.size()-i-1);
break;
}
}
}
string End = "";
int remainder;
while (sum != 0){
remainder = sum%num3;
sum = sum/num3;
End += change[remainder];
}
reverse(End.begin(),End.end());
printf("%s",End.c_str());
}
查看13道真题和解析