#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<cstdio>
#include<iostream>
#include<math.h>
using namespacestd;
int main(){
char a[7];
// for(int i = 0; i < 7; i++) a[i] = 1;
int b,c;
b = c = 0;
int sum =0;
while(scanf("%s %d %d",a,&b,&c)!=EOF){
/* int i = 0;
while(a[i] == '0') ++i;
int t = i;
int length = strlen(a);
for(int j = t ; j < length; ++j ) {
int zhishu;
if(a[j] >= '0' && a[j] <= '9'){
zhishu = a[j] - '0';
}else zhishu = a[j] - '0' - 7;
int l;
if(t != 0) l = pow(b,length - j - t);
else l = pow(b,length - j - t - 1);
sum += zhishu*l;
*/
sum = strtol(a,NULL, b);
if(sum ==0) cout <<" 0" << endl ;
else{
//已经全转成了十进制
char m[7] = {0};
for(int i =0; i != 7; ++i) {
int temp = sum % c;
if(temp >=10){
char n;
n = temp + 55;
m[6-i] = n;
}
else m[6-i] = temp +48 ;
sum /= c;
}//转换成对应进制
if(sum !=0) cout <<" ERROR" << endl;
else {
int i , j;
i = j = 0;
while(m[j]=='0') {++j;cout << " ";}
for(int i = j; i <7; i++){
cout << m[i];
}
cout <<endl;
}
}
}
return0;
}
1.遇到任意进制的字符串格式转10进制,可以直接使用strtol(字符串,null,原进制)
2.多次wa因为没有考虑到00000000 的现实情况,应该把它也作为极端情况之一
3.十进制转任意进制关键 先取余数 再除 如果大于10 就用 temp - 10 + 'A'
4.可以通过这个实现打印的字符长度为7的效果,
printf("%7s\n","ERROR");
printf("%7s\n","0");
printf("%7s\n",output);