1. 程式人生 > >【C語言程式設計】將十進位制數轉化為二進位制並輸出

【C語言程式設計】將十進位制數轉化為二進位制並輸出

十進位制轉化為二進位制並輸出(以整型為例)

首先需要明確十進位制轉為二進位制的演算法:將所需轉化的數除以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;
}