BCD數是用一個字節來表達兩位十進制的數,每四個比特表示一位。因此若是一個BCD數的十六進制是0x12,它表達的就是十進制的12。可是小明沒學過BCD,把全部的BCD數都看成二進制數轉換成十進制輸出了。因而BCD的0x12被輸出成了十進制的18了!編程
如今,你的程序要讀入這個錯誤的十進制數,而後輸出正確的十進制數。提示:你能夠把18轉換回0x12,而後再轉換回12。數組
輸入在一行中給出一個[0, 153]範圍內的正整數,保證能轉換回有效的BCD數,也就是說這個整數轉換成十六進制時不會出現A-F的數字。spa
輸出對應的十進制數。code
18blog
12io
#include <stdio.h> #include <math.h> /** * 基礎編程題目集-7-4 BCD解密 */ int main(int argv, char * argc) { int number = 0; int arr[8]; int index = -1; int i; int a[5] = {0}; int sum = 0; int offset = 0; scanf("%d", &number); while(number != 0) { index++; arr[index] = number % 2; number = number / 2; } for(i = 1; i < index + 2; i++) { if (i % 5 == 0) { a[offset] = sum; offset++; sum = arr[i - 1]; } else { sum += arr[i - 1] * pow(2, ((i - 1) % 5) + offset); } } a[offset] = sum; for(i = offset; i > -1 ; i--) { printf("%d", a[i]); } return 0; }