题目:进制转换,给你a进制的串s转化成b进制的数字,长多7位则输出ERROR。
分析:数学题。按照进制的规则计算,先转化成10进制,然后一直除base取的余数倒过来即可。
说明:注意0。
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
char buf[36];
int change1( char c )
{
if ( c >= '0' && c <= '9' )
return c - '0';
return c - 'A' + 10;
}
int change2( char c )
{
if ( c < 10 )
return c + '0';
return c - 10 + 'A';
}
int main()
{
int base1,base2;
while ( scanf("%s%d%d",buf,&base1,&base2) != EOF ) {
int value = 0,move = 0,save = 0;
while ( buf[move] ) {
value *= base1;
value += change1(buf[move ++]);
}
if ( !value ) buf[save ++] = '0';
while ( value ) {
buf[save ++] = change2(value%base2);
value /= base2;
}
if ( save > 7 ) printf(" ERROR\n");
else {
for ( int i = save ; i < 7 ; ++ i )
printf(" ");
while ( -- save >= 0 )
printf("%c",buf[save]);
printf("\n");
}
}
return 0;
}