題目敘述
請實作一程式,此程式可以不斷要求使用者輸入一浮點數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;
}
|