C++/C語言中十進位制轉二進位制的常見方法
阿新 • • 發佈:2019-01-29
用一個演算法實現十進位制數向二進位制數轉換,我們考慮得到7的二進位制表示,奇數的二進位制形式最後一位肯定是1,而偶數的二進位制最後一位肯定是0。可以通過7%2來計算二進位制最後一位數是0或者1。即對於十進位制整數n而言,二進位制表示的最後一位肯定可以用n%2計算出來。而為了得到二進位制倒數第二位上的數字,則需要把十進位制數除以2,這種對於十進位制數的計算相當於把該數值的二進位制位向左移了一位(可以類比計算一個十進位制數的十位上數字,只需要把該數值除以十,此時得到的結果數值的個位即原數值的十位數值)。如果此時得到的結果是奇數,則說明二進位制數倒數第二位對應1,否則為0。此時需要考慮,何時結束運算,只要被2除的結果等於或者大於2,那就還需要一位二進位制位進行表示。因此,只有被2除的結果小於2時,才停止計算。所以,可以考慮迴圈和遞迴的方法實現該演算法。
C語言實現方法一:
#include<stdio.h> #define MAX 32 int main(void) { int i=0,n,a[MAX]; printf("請輸入一個十進位制整數:\n"); scanf("%d",&n); while (n>0) //迴圈過程的始終,判斷n是否能被2除盡 { a[i] = n%2; //用陣列儲存每次除以2之後的餘數,即斷定奇偶性,對應二進位制位上數值 i = i+1; n = n/2; } printf("十進位制整數轉換為二進位制數是:\n"); for(; i > 0; i--) printf("%d",a[i-1]); printf("\n"); return 0; }
C語言實現方法二:
#include <stdio.h> #define MAX 32 int main(void) { int a,r,i=0,j=1,count[MAX]; //輸入的是a printf("請輸入一個十進位制整數:\n"); scanf("%d",&a); do{ //迴圈,直到a等於0跳出 r = a%2; //求每一次的餘數,即二進位制位上的數值 a = a/2; i++; count[i] = r; } while(a != 0); //每次除以2之後,二進位制位左移一位,判斷是否結束迴圈 printf("十進位制整數轉換為二進位制數是:\n"); for(j = i; j > 0; j--) //倒序輸出二進位制位上數值 printf("%d",count[j]); printf("\n"); return 0; }
C語言實現方法三:
#include<stdio.h>
void binary_cal(int n){
int r;
r = n % 2;
if(n >= 2)
binary_cal(n/2); //使用遞迴函式實現,佔用較多記憶體,執行速度較慢
printf("%d",r);
return 0;
}
int main(void){
int num;
printf("請輸入一個十進位制整數:\n");
while(scanf("%d",&num) == 1){
printf("十進位制整數轉換為二進位制數是:\n");
binary_cal(num);
putchar('\n');
}
return 0;
}
C++實現程式碼:
#include"stdafx.h"
#include <iostream>
#define MAX 32
using namespace std;
int main(){
cout << "請輸入一個整型十進位制數:" << endl;
int num,i= 0;
cin >> num;
cout << "十進位制整數轉換為二進位制數是:" <<endl;
int bin[MAX],length = 0;
do
{
bin[i] = num % 2;
num = num / 2;
i++;
length++;
} while (num != 1);
bin[length] = num;
length++;
for (i = length - 1; i >= 0; i--)
cout << bin[i];
cout << endl;
return 0;
}