题目描述
求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F)。
第一次提交的代码(false):
#include<cstdio>
#include<cstring>
char aft[] = "0123456789ABCDEF";
int main() {
char n[40];
int a, b;
while(scanf("%d %s %d",&a,n,&b) != EOF) {
int d=0, pro=1, len=strlen(n);
for(int i=len-1; i>=0; i--) {
int temp;
if(n[i]>='a'&&n[i]<='z')
temp = n[i]-'a'; // 改为 temp = 10+n[i]-'a';
else if(n[i]>='A' && n[i]<='Z')
temp = n[i]-'A'; //改为 temp = 10+n[i]-'A';
else
temp = n[i]-'0';
d = d + pro*temp;
pro *= a;
}
int baft[100], num=0;
do {
baft[num++] = d%b;
d /= b;
} while(d != 0);
for(int i=num-1; i>=0; i--) {
printf("%c", aft[baft[i]]);
}
printf("\n");
}
return 0;
}
错误原因:a进制转化为10进制时,若输入为a,z或A,Z之间的数,转化为数字时忘记加10。