【题意】 把十六进制以下的m进制转换为n进制; 1、第一个数是初始值,第二个数是初始进制,第三个数是要求转化的进制。 2、输出必须小于等于七位。否则输出ERROR。 3、把初始值转化为十进制数。原理:每位数字*初始进制^(位序-1)。 4、把十进制数转化为要求的进制数。原理:除N取余法
#include<iostream> #include<string.h> #include<cmath> typedef long long LL; using namespace std; int main() { char c[20]; long int i,j,n,k,a,b,y; while(cin>>c>>a>>b) { char s[20]; k=0; n=strlen(c); for(i=0;i<=n;++i) //先转换成十进制 { if(c[i]>='0'&&c[i]<='9') { y=c[i]-48; //相当于 y=c[i]-'0' } else { switch(c[i]) { case 'A':y=10;break; case 'B':y=11;break; case 'C':y=12;break; case 'D':y=13;break; case 'E':y=14;break; case 'F':y=15;break; } } k+=(y*(LL)pow(a,n-i-1)); } if(k==0) { cout<<" 0"<<endl; continue; } i=0; while(k) //再转换成 b进制 { y=k%b; if(y>=0&&y<=9) { s[i]=y+48; //相当于 y=c[i]+'0' } else { switch(y) { case 10:s[i]='A';break; case 11:s[i]='B';break; case 12:s[i]='C';break; case 13:s[i]='D';break; case 14:s[i]='E';break; case 15:s[i]='F';break; } } k=k/b; i++; } if(i>7) { cout<<" ERROR"; } else { for(j=0;j<7-i;j++) { cout<<" "; } i--; for(;i>=0;i--) { cout<<s[i]; } } cout<<endl; } return 0; }