計算機概論|HW15

題目敘述

請實作一程式,此程式可以不斷要求使用者輸入一浮點數N (N > 0,建議使用double)及兩整數 b (1 < b <= 36)、d (0<=d<=5),直到輸入的N或b或d不在指定範圍內時結束程式。當輸入一組N、b、d之後,請將N(10進制)轉換為b進制數字並輸出(d代表小數點後d位,小數點d位後面的數字直接捨棄,此外,當d為0時,不能顯示小數點)。

範例輸入

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
16.17 2 2 
> 10000.00  

10.256 2 3  
> 1010.010  

16.19 5 3  
> 31.043

35.33 36 5  
> Z.BVOHA  

0 0 0  

答題思路

參考答案

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>

#define MAX_N 100
#define num2char(num) ((num >= 0 && num <= 9)? 
                          (char)('0'+num): (char)('A' + num - 10))

int integer2any(char buffer[], int number, int base) {
    int i;
    for(i=0; number; i++) {
        buffer[i] = num2char(number % base);
        number /= base;
    }
    return i;
}

void decimal2any(double number, int base, int d) {
    if(d != 0) {
        putchar('.');
        for (int i = 0; i < d; i++) {
            double temp = (number * base);
            int res = (int)temp;
            number = temp - res;
            putchar(num2char(res));
        }
    }
}

int main() {
    double n;
    int b, d;
    
    while(scanf("%lf %d %d", &n, &b, &d) && b > 0) {
        char buffer[MAX_N];
        int integer = (int)n;
        double decimal = n - integer;
        
        int length = integer2any(buffer, integer, b);
        for(int i=length; i; i--) {
            putchar(buffer[i - 1]);
        }
        decimal2any(decimal, b, d);
        putchar('\n');
    }
    return 0;
}
最後更新 Dec 21, 2022 12:00 +0800