1. 程式人生 > 實用技巧 >c:進位制轉換

c:進位制轉換

20、通過程式設計,能夠完成2進位制與10進位制之間的的轉換;16進位制與10進位制之間的的轉換;2進位制與16進位制之間的的轉換;2進位制與8進位制之間的的轉換;8進位制與16進位制之間的的轉換;

想要完成進位制轉換
首先要知道c語言中不同進位制的輸入輸出方式
如十進位制的整數用 %d
我特意去查了一下
十六進位制 %x
八進位制 %o
二進位制。。。
然後我就發現沒有二進位制的表示方法
只有自己手動寫函數了
我的程式碼在這裡:

#include<stdio.h>
#include<math.h>
#include<string.h>

//定義字元數字轉換整型數字的函式
int fun(char c){
    int a=c-'0';
    return a;
}

//2轉10的函式
int ten(char *s){
    int i,t=0,len,a[80];
    len=strlen(s);//獲取字串長度,也就是2進位制數的位數
    for(i=0;i<len;i++){
        a[i]=fun(s[len-i-1]);//把裝有二進位制數字的字元陣列轉換為整型陣列
        t+=a[i]*(int)pow(2,i);//在同一迴圈下可完成2進位制轉10進位制
    }
    return t;
}

//主方法在此
int main(){
    //定義變數
    int n,t;
    char s[80];
    while(1){
        //互動介面
        printf("1 2進位制轉10進位制\n2 16進位制轉10進位制\n3 2進位制轉16進位制\n4 2進位制轉8進位制\n5 8進位制轉16進位制\n0 退出\n");
        printf("請選擇演算法:");
        scanf("%d",&n);

        if(n==1||n==3||n==4){//處理2進位制的情況
            printf("請輸入一個2進位制數字:");
            scanf("%s",s);//用字串來輸入,方便對逐個數字處理
            t=ten(s);//呼叫函式,把2進位制轉為10進位制
            if(n==1)
                printf("轉為10進位制:%d\n\n",t);
            if(n==3)
                printf("轉為16進位制:%x\n\n",t);
            if(n==4)
                printf("轉為8進位制:%o\n\n",t);
        }

        if(n==2){//16轉10只要按照對應的格式輸入輸出即可
            int x;
            printf("輸入一個16進位制數字:");
            scanf("%x",&x);
            printf("轉為10進位制:%d\n\n",x);
        }

        if(n==5){//8轉16只要按照對應的格式輸入輸出即可
            int o;
            printf("輸入一個8進位制數字:");
            scanf("%o",&o);
            printf("轉為16進位制:%x\n\n",o);
        }    

        if(n==0)
            break;
    }
    return 0;    
}

部分執行測試: