C:BCD解密

BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!
现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。

输入格式:

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

输出格式:

输出对应的十进制数。

输入样例:

18

输出样例:

12

#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d",&a);    
    b = a / 16;    c = a % 16;    
    printf("%d",b*10+c);    
    return 0;
}
好的,以下是一个完善的Verilog程序,可以实现输入5位二进制数,输出8位BCD码: ``` module bin2bcd( input [4:0] bin, // 5位二进制数输入 output [7:0] bcd // 8位BCD码输出 ); reg [3:0] bcd_3bit; // 定义3位BCD码 always @(*) begin case(bin) 5'b00000: bcd_3bit = 3'b000; 5'b00001: bcd_3bit = 3'b001; 5'b00010: bcd_3bit = 3'b010; 5'b00011: bcd_3bit = 3'b011; 5'b00100: bcd_3bit = 3'b100; 5'b00101: bcd_3bit = 3'b101; 5'b00110: bcd_3bit = 3'b110; 5'b00111: bcd_3bit = 3'b111; default: bcd_3bit = 3'b000; endcase // 将3位BCD码转换为8位BCD码 if (bcd_3bit >= 3'b010) bcd[0] = 1'b1; else bcd[0] = 1'b0; if (bcd_3bit == 3'b011 || bcd_3bit == 3'b111) bcd[1] = 1'b1; else bcd[1] = 1'b0; if (bcd_3bit == 3'b100 || bcd_3bit == 3'b101 || bcd_3bit == 3'b110 || bcd_3bit == 3'b111) bcd[2] = 1'b1; else bcd[2] = 1'b0; if (bcd_3bit == 3'b001 || bcd_3bit == 3'b011 || bcd_3bit == 3'b101 || bcd_3bit == 3'b111) bcd[3] = 1'b1; else bcd[3] = 1'b0; if (bcd_3bit == 3'b010 || bcd_3bit == 3'b011 || bcd_3bit == 3'b110 || bcd_3bit == 3'b111) bcd[4] = 1'b1; else bcd[4] = 1'b0; if (bcd_3bit == 3'b001 || bcd_3bit == 3'b010 || bcd_3bit == 3'b011 || bcd_3bit == 3'b100 || bcd_3bit == 3'b101 || bcd_3bit == 3'b110 || bcd_3bit == 3'b111) bcd[5] = 1'b1; else bcd[5] = 1'b0; if (bcd_3bit == 3'b010 || bcd_3bit == 3'b011 || bcd_3bit == 3'b100 || bcd_3bit == 3'b110) bcd[6] = 1'b1; else bcd[6] = 1'b0; if (bcd_3bit == 3'b001 || bcd_3bit == 3'b011 || bcd_3bit == 3'b101 || bcd_3bit == 3'b111) bcd[7] = 1'b1; else bcd[7] = 1'b0; end endmodule ``` 该程序中,首先定义了一个3位BCD码,然后使用case语句将输入的5位二进制数转换为相应的3位BCD码。接着,使用if语句将3位BCD码转换为8位BCD码输出。需要注意的是,该程序只是一种实现方式,实际应用中可能需要更多的复杂逻辑来实现更完整的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值