进制转换

其他进制向十进制转换:利用一个变量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("
");
43     }
44     return 0;
45 }
原文地址:https://www.cnblogs.com/Xilian/p/3646991.html