7-15 BCD解密 (10 point(s))

By | 最新修改:2024-08-17

声明

这是 拼题A(PTA)《中M2019秋C入门和进阶练习集》的习题。原题在 https://pintia.cn/problem-sets/1163286449659043840/problems/1174288506294865963 (侵删)

本人的答案仅供交流学习,请勿用于当作答案来提交!

题目描述

7-15 BCD解密 (10 point(s))

BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!

现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。

输入格式:
输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。

输出格式:
输出对应的十进制数。

输入样例:
18
输出样例:
12

我的答案

/*================================================================
*   Copyright (C) 2019 程序知路. All rights reserved.
*   
*   Filename    :7-15-BCD解密.c
*   Author      :程序知路
*   E-Mail      :admin@icxzl.com
*   Create Date :2019年10月10日
*   Description :
================================================================*/
#include 
#include 

int main() {

    int num;
    scanf("%d", &num);

    if (num >= 0 && num  0) {
            bit = num % 2;
            //printf("\tbit: %d\n", bit);
            binary[index--] = bit;
            num /= 2;
        }

        // for (int i = 0; i = 4; -- i) {
            result += binary[i] * pow(2, cnt++);
        }

        // printf("%d", result);
        int result2 = 0;
        for (cnt = 0; i >= 0; -- i) {
            result2 += binary[i] * pow(2, cnt++);
        }

        printf("%d", result2 * 10 + result);
    }

    return 0;
}


程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com