进制转换的那些事儿

进制转换的那些事儿

进制转换是一种较为特殊的数位拆解

以下解释部分来源:知乎网友
进制这事儿,说到底就是位值原理,即:同一个数字,放在不同的数位上,代表不同大小的“量”。例如:十进制中,百位上的1表示100,十位上的1表示10。
任何进制中,每个数都可以按位权展开成各个数位上的数字乘以对应数位的位权,再相加的形式,如:
  十进制的123=1×100+2×10+3×1
  十进制的9876=9×1000+8×100+7×10+6×1
问:为啥相应的数位是1000、100、10、1?为啥不是4、3、2、1?
答:十进制,满十进一,再满十再进一,因此要想进到第三位,得有10×10;第4位得有10×10×10
这样我们就知道了:
对10进制,从低位到高位,依次要乘以10^0,10^1,10^2,10^3……,也就是1、10、100、1000
对2进制,从低位到高位,依次要乘以2^0,2^1,2^2,2^3……,也就是1、2、4、8……


总之,n进制k转换成 m进制t,只需先将n进制k转换成十进制q,再将十进制q转换成m进制t

题目描述

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

输入

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

输出

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

样例输入

15 Aab3 7

样例输出

210306

代码块

int main() {
    int a, b;
    char n[40];
    while (scanf("%d%s%d", &a, n, &b)!=EOF) {
        int size1 = strlen(n);
        
        int res=0;
        for (int i = size1-1; i >= 0; i--)
        {
            int x;
            if (n[i] >= '0' && n[i] <= '9') {
                x = n[i] - '0';
            }
            else if (n[i] >= 'a' &&n[i] <= 'z') {
                x = n[i] - 'a'+10;
            }
            else
            {
                x= n[i] - 'A' + 10;
            }
            
            res += x * pow(a, size1 - i - 1);
        }
        
        char ans[40];
        int size = 0;
        while (res != 0) {
            int t = res%b;
            if (t < 10) {
                ans[size++] = t + '0';
            }
            else {
                ans[size++] = t - 10 + 'A';
            }
            res /= b;
        }
        for (int i = size-1; i>=0 ; i--)
        {
            printf("%c", ans[i]);
        }
        printf("\n");
    }
    return 0;
}

总结

1.字符转换,根据ACSII码,进行数字与字符之间的转换。
            if (n[i] >= '0' && n[i] <= '9') {
                x = n[i] - '0';
            }
            else if (n[i] >= 'a' &&n[i] <= 'z') {
                x = n[i] - 'a'+10;
            }
            else
            {
                x= n[i] - 'A' + 10;
            }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章