【C語言程式設計】將十進位制數轉化為二進位制並輸出
阿新 • • 發佈:2019-01-10
十進位制轉化為二進位制並輸出(以整型為例)
首先需要明確十進位制轉為二進位制的演算法:將所需轉化的數除以2,所得餘數為k1,將所得商再除以2,所得餘數為k2…...重複步驟直到商為0;讀數時從最後一個餘數讀起,即kn,k(n-1)…k2,k1;所得數便是轉化成的二進位制數(除二取餘法)
例如:將20轉化為二進位制數
20/2 商為10 餘數為0 k1
10/2 商為5 餘數為0 k2
5/2 商為2 餘數為1 k3
2/2 商為1 餘數為0 k4
1/2 商為0 餘數為1 k5
故二進位制數為:10100
程式設計思路:定義輸入的函式為input,商為quotient,餘數為remainder;則可以用一個數組result來存放每次計算後所得的餘數,然後倒序輸出
程式碼如下:
#include <stdio.h> int main(void) { //提示使用者輸入資料 int input = 0 ; printf("請輸入一個數據:"); scanf("%d", &input); //十進位制轉為二進位制 int quotient = input; int remainder = 0; int result [100]; int i = 0; while (quotient != 0) { remainder = quotient % 2; //求餘數 result [i] = remainder; //陣列存放每次所得的餘數 i++; quotient = quotient / 2; //求商 } i--; //while迴圈中多加了一次i,需要減去 //倒序輸出陣列 printf("轉化成二進位制為:"); for ( ; i >= 0 ; --i) { printf("%d", result[i]); } printf("\n"); return 0 ; }
但是在這種情況中,由於不知道輸入資料的大小,存在事先定義好的陣列存放不下所有餘數的情況。如果將所有餘數化為一個具體的值,則更具有適應性,也方便輸出
思路:定義輸出的值為result, 可以發現result的個位等於k1,十位等於k2......定義time來記錄result進位的次數,每進一次即time*10;則可以通過time*k來控制result的個十百千萬....位
程式碼如下:
#include <stdio.h> int main(void) { //提示使用者輸入資料 int input; printf("請輸入一個數據:"); scanf("%d", &input); //將數字轉成二進位制 int quotient = input; int remainder = 0; int result = 0; int time = 1; while (quotient != 0 ) { remainder = quotient % 2; //求餘數 result += remainder * time; //將餘數化為一個具體的值 quotient = quotient / 2; //求商 time *= 10; } //輸出二進位制資料 printf("轉化成二進位制為:%d\n",result); return 0; }