如果你知道FFFFFFF的十进制数是268435455,并且int的范围是2147483647的话,此题可以直接水过。我初始看到此题还是懵了下怕转换的中间值十进制会超过范围...多虑了。
学弟问的,代码基本上没变
#include<stdio.h> #include<string.h> int main() { char s[150],t[8]; int i,a,b,su,j,d,l,r,w; while(scanf("%s%d%d",s,&a,&b)!=EOF) { d=1;l=0;su=0;w=1; for(i=strlen(s)-1,j=1;i>=0;i--) { if(s[i]<='9'&&s[i]>='0') r=s[i]-'0'; else if(s[i]>='A'&&s[i]<='F') r=s[i]-'A'+10; su+=r*j; j=j*a; } i=0; while(su) { j=su%b; if(j<=9&&j>=0) j+='0'; else if(j>9&&j<=16) j=j-10+'A'; t[i++]=j; su/=b; } if(i>7) {printf(" ERROR\n"); continue;} for(j=0;j<7-i;j++) printf(" "); for(j=i-1;j>=0;j--) printf("%c",t[j]); printf("\n"); } return 0; }