PTA-基礎編程題目集-7-4 BCD解密

        BCD數是用一個字節來表達兩位十進制的數,每四個比特表示一位。因此若是一個BCD數的十六進制是0x12,它表達的就是十進制的12。可是小明沒學過BCD,把全部的BCD數都看成二進制數轉換成十進制輸出了。因而BCD的0x12被輸出成了十進制的18了!編程

        如今,你的程序要讀入這個錯誤的十進制數,而後輸出正確的十進制數。提示:你能夠把18轉換回0x12,而後再轉換回12。數組

輸入格式:

        輸入在一行中給出一個[0, 153]範圍內的正整數,保證能轉換回有效的BCD數,也就是說這個整數轉換成十六進制時不會出現A-F的數字。spa

輸出格式:

        輸出對應的十進制數。code

輸入樣例:

18blog

輸出樣例:

12io

解題思路:

  1. 讀入一個數,十進制
  2. 將十進制的數轉換爲二進制形式,存放至數組
  3. 根據BCD碼的求解規則,以4位二進制爲一個單元計算求解
  4. 輸出

代碼:

#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;
}

執行結果

相關文章
相關標籤/搜索