您好,登錄后才能下訂單哦!
這篇文章主要介紹“C語言如何實現常見進制轉換”,在日常操作中,相信很多人在C語言如何實現常見進制轉換問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言如何實現常見進制轉換”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
方法:舉例將十進制數100轉換為二進制數,就是將100與2相除,得到商以及余數,再將商與2不斷相除,最終除到商為0。按順序記錄下余數,再將余數逆序輸出,即為二進制的結果。八進制同理,商不斷與8相除,最終除到商為0,按順序記錄下余數,再將余數逆序輸出,即八進制的結果。此方法同樣可以推廣到要轉換成二到九的任何一種進制。
圖形如下:
代碼如下:
#include <stdio.h> int main() { int x, n; scanf("%d %d", &x, &n);//x是要轉換的十進制數,n為要轉換成的進制 int arr[100] = { 0 };//創建一個足夠大的數組來存放余數 int i = 0,j = 0; while (x) { arr[i++] = x % n;//存放余數,i最后的值正好是余數的個數 x /= n; } for (j = i - 1; j >= 0; j--) { printf("%d", arr[j]);//余數倒序輸出 } printf("\n"); return 0; }
將十進制轉換為十六進制同樣需要用到將商不斷除16以及逆序輸出等方法,但由于十六進制中會出現A\B\C\D\E\F等字符,所以還需要將取得的余數做進一步轉換。代碼如下:
#include <stdio.h> int main() { int x; scanf("%d", &x); char arr[100] = { 0 };//因為十六進制中會出現A\B\C\D\E\F等字符,所以保存余數的數組類型應定義為char int i = 0, j = 0; while (x) { arr[i++] = x % 16; x /= 16; } for (j = 0; j < i; j++) { //將取出的余數轉換為對應的字符 switch (arr[j]) { case 10:arr[j] = 'A'; break; case 11:arr[j] = 'B'; break; case 12:arr[j] = 'C'; break; case 13:arr[j] = 'D'; break; case 14:arr[j] = 'E'; break; case 15:arr[j] = 'F'; break; default:arr[j] += 48; } } for (j = i - 1; j >= 0; j--) { printf("%c", arr[j]);//逆序打印 } printf("\n"); return 0; }
方法:需要將輸入的數的每一位取出,再與這個位上的權重相乘,最后相加得到結果。
代碼如下:
#include <stdio.h> #include <math.h> int main() { int n = 0, sum = 0, i = 0, x = 0; scanf("%d %d", &x, &n);//x為輸入的二進制或八進制的數,n為進制。 while (x) { sum += (x%10)*pow(n, i++);//x%10將x的每一位取出,再與這個位上的權重相乘。 x /= 10; } printf("%d\n", sum); return 0; }
十六進制中含A\B\C\D\E\F等字符,所以在輸入的時候可以將其看成輸入一個字符串,需要先將每位上的字符轉換為對應的數字與本位上的權重相乘,再相加得到最后的值。
代碼如下:
#include <stdio.h> #include <string.h> #include <math.h> int main() { char arr1[100] = { 0 }; scanf("%s", arr1); int len = strlen(arr1); int i = 0, sum = 0; for (i = 0; i<len; i++) { int temp = 0; switch (arr1[i]) { case 'A':temp = 10; break; case 'B':temp = 11; break; case 'C':temp = 12; break; case 'D':temp = 13; break; case 'E':temp = 14; break; case 'F':temp = 15; break; default:temp = arr1[i] - '0'; break; //將各個位上的字符轉換為對應的數字 } sum += temp * pow(16, len-i-1);//各個位上的權重相乘再相加 } printf("%d\n", sum); return 0; }
到此,關于“C語言如何實現常見進制轉換”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。