進制轉換的那些事兒

進制轉換的那些事兒

進制轉換是一種較爲特殊的數位拆解

以下解釋部分來源:知乎網友
進制這事兒,說到底就是位值原理,即:同一個數字,放在不同的數位上,代表不同大小的“量”。例如:十進制中,百位上的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;
            }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章