其他进制向十进制转换:利用一个变量c依次计算每位权重,初始权重为 1,每经过一位就累乘进制数a,c依次等于1,a1,a2,a3 .
从低位到高位依次遍历各个数位上的数字,与当前的权重相乘;依次累加得到的积,即为转换后的十进制数。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 int main()//k进制数转换成十进制,十进制转换成m进制数, 6 { 7 int a,b; 8 char bufa[20]; 9 while(scanf("%d%s%d",&a,bufa,&b)!=EOF) 10 { 11 int tmp = 0,c = 1,l = strlen(bufa);//tmp为将要计算的a进制数对应的十进制,c为各个数位的权重, 12 //最低位权重为1,之后每位权重是前一位权重的a倍 13 for(int i=l-1;i>=0;i--)//从低位到高位遍历每一位上的数 14 { 15 int x=0;//计算该位上的数字 16 if(bufa[i]>='0' && bufa[i]<='9') 17 { 18 x=bufa[i]-'0';//计算其代表的数字 19 } 20 else if(bufa[i]>='a' && bufa[i]<='z') 21 { 22 23 x=bufa[i]-'a'+10; 24 } 25 else 26 { 27 x=bufa[i]-'A'+10; 28 } 29 tmp+=x*c; 30 c=c*a;//下一位数位权重 31 } 32 int s=0; 33 char bufb[20]; 34 do 35 { 36 int x = tmp%b; 37 bufb[s ++] = (x<10)?(x+'0'):(x-10+'A');//将数字转换成字符 38 tmp = tmp/b; 39 }while(tmp!=0); 40 for(i = s - 1;i >= 0;i --) 41 printf("%c",bufb[i]); 42 printf("\n"); 43 } 44 return 0; 45 }