C語言實現(xiàn)常見進制轉(zhuǎn)換的示例代碼
前言
生活中最常見的進制是十進制,而有一類編程題會要求將十進制轉(zhuǎn)換為其他進制,本篇博客將主要講述C語言中常見的幾類進制轉(zhuǎn)換問題。
一、十進制數(shù)轉(zhuǎn)換為二進制數(shù)、八進制數(shù)
方法:舉例將十進制數(shù)100轉(zhuǎn)換為二進制數(shù),就是將100與2相除,得到商以及余數(shù),再將商與2不斷相除,最終除到商為0。按順序記錄下余數(shù),再將余數(shù)逆序輸出,即為二進制的結果。八進制同理,商不斷與8相除,最終除到商為0,按順序記錄下余數(shù),再將余數(shù)逆序輸出,即八進制的結果。此方法同樣可以推廣到要轉(zhuǎn)換成二到九的任何一種進制。
圖形如下:

代碼如下:
#include <stdio.h>
int main()
{
int x, n;
scanf("%d %d", &x, &n);//x是要轉(zhuǎn)換的十進制數(shù),n為要轉(zhuǎn)換成的進制
int arr[100] = { 0 };//創(chuàng)建一個足夠大的數(shù)組來存放余數(shù)
int i = 0,j = 0;
while (x)
{
arr[i++] = x % n;//存放余數(shù),i最后的值正好是余數(shù)的個數(shù)
x /= n;
}
for (j = i - 1; j >= 0; j--)
{
printf("%d", arr[j]);//余數(shù)倒序輸出
}
printf("\n");
return 0;
}
二、十進制轉(zhuǎn)換為十六進制
將十進制轉(zhuǎn)換為十六進制同樣需要用到將商不斷除16以及逆序輸出等方法,但由于十六進制中會出現(xiàn)A\B\C\D\E\F等字符,所以還需要將取得的余數(shù)做進一步轉(zhuǎn)換。代碼如下:
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
char arr[100] = { 0 };//因為十六進制中會出現(xiàn)A\B\C\D\E\F等字符,所以保存余數(shù)的數(shù)組類型應定義為char
int i = 0, j = 0;
while (x)
{
arr[i++] = x % 16;
x /= 16;
}
for (j = 0; j < i; j++)
{
//將取出的余數(shù)轉(zhuǎn)換為對應的字符
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;
}
三、二進制數(shù)、八進制數(shù)轉(zhuǎn)換為十進制數(shù)
方法:需要將輸入的數(shù)的每一位取出,再與這個位上的權重相乘,最后相加得到結果。
代碼如下:
#include <stdio.h>
#include <math.h>
int main()
{
int n = 0, sum = 0, i = 0, x = 0;
scanf("%d %d", &x, &n);//x為輸入的二進制或八進制的數(shù),n為進制。
while (x)
{
sum += (x%10)*pow(n, i++);//x%10將x的每一位取出,再與這個位上的權重相乘。
x /= 10;
}
printf("%d\n", sum);
return 0;
}
四、十六進制數(shù)轉(zhuǎn)換為十進制數(shù)
十六進制中含A\B\C\D\E\F等字符,所以在輸入的時候可以將其看成輸入一個字符串,需要先將每位上的字符轉(zhuǎn)換為對應的數(shù)字與本位上的權重相乘,再相加得到最后的值。
代碼如下:
#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;
//將各個位上的字符轉(zhuǎn)換為對應的數(shù)字
}
sum += temp * pow(16, len-i-1);//各個位上的權重相乘再相加
}
printf("%d\n", sum);
return 0;
}到此這篇關于C語言實現(xiàn)常見進制轉(zhuǎn)換的示例代碼的文章就介紹到這了,更多相關C語言進制轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C/C++雜記 虛函數(shù)的實現(xiàn)的基本原理(圖文)
這篇文章主要介紹了C/C++雜記 虛函數(shù)的實現(xiàn)的基本原理(圖文),需要的朋友可以參考下2016-06-06
C/C++?Qt?TabWidget?實現(xiàn)多窗體創(chuàng)建詳解
TabWidget組件配合自定義Dialog組件,可實現(xiàn)一個復雜的多窗體分頁結構。這篇文章就主要介紹了如何通過TabWidget實現(xiàn)多窗體的創(chuàng)建,感興趣的小伙伴可以了解一下2021-12-12
C++示例分析內(nèi)聯(lián)函數(shù)與引用變量及函數(shù)重載的使用
為了消除函數(shù)調(diào)用的時空開銷,C++ 提供一種提高效率的方法,即在編譯時將函數(shù)調(diào)用處用函數(shù)體替換,類似于C語言中的宏展開。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱為內(nèi)聯(lián)函數(shù)(Inline Function),又稱內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)2022-08-08
詳解_beginthreadex()創(chuàng)建線程
這篇文章主要介紹了詳解_beginthreadex()創(chuàng)建線程,使用_beginthreadex(),需要的頭文件支持#include <process.h> 下面我們就來看看具體的實現(xiàn)吧2022-01-01

