背景
数码管是一种廉价的十进制数字显示装置,它的基本工作原理是:一个数码管有 7 段,我们将它对应成八位二进制的 8 位。这 8 位的编号从左向右分别是 7、6、5、4、3、2、1、0。数码管的一段对应二进制的一位,如果要点亮某一段,则需要将相应的二进制位置 1,其余不亮的段要将对应的位置 0。下图表示了 7 个二进制在数码管上对应的位置:
2
+---+
3| |4
| 1 |
+---+
5| |6
| 0 |
+---+
例如,我们要显示出数字“1”,则应该点亮数码管的第4和6段。这样对应的8位二进制数就是:0101 0000。如果用十六进方式表示出来就是 50。
同理,要显示出“3”,应该点亮:0、1、2、4、6;对应的二进表示为:0101 0111,用十六进制表示就是 57。
请编写一个程序,用 5 个数码管显示一个 16 位 (bit) 的正整数。
说明:如果需要显示的数据不足5位,则在数据前面补0。例如120要显示为00120。
输入
程序的输入是一系列 16 位(bit)的正整数(10进制形式),数与数之间允许用空白符隔开,当数字为 0 时程序结束。
输出
针对每个正整数,输出 5 个字节的十六进制数,它们可以表示 5 个数码管的状态。其中右侧第 1 个数表示输入数字的个位,第 2 个数表示十位,以此类推。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include <stdio.h>
int main() {
int num;
int a, b, c, d, e;
char arr[10][3] = {"7D", "50", "37", "57", "5A", "4F", "6F", "54", "7F", "5F"};
while (1) {
scanf("%d", &num);
if (num == 0)
break;
a = num / 10000;
b = num / 1000 % 10;
c = num / 100 % 10;
d = num / 10 % 10;
e = num % 10;
printf("%s %s %s %s %s\n", arr[a], arr[b], arr[c], arr[d], arr[e]);
}
return 0;
}