Stoneの8421码

来源:互联网 发布:java web小项目实例 编辑:程序博客网 时间:2024/06/06 03:06

Stoneの8421码

Time Limit: 1000MS Memory Limit: 65536KB

Problem Description

8421码是一种最常见的有权码,其 4 位二进制从高位至低位的权依次是 2^3、2^2、2^1、2^0,即为 8、4、2、1。显然,这与普通的二进制数的权值是一样的。因此,按 8421码编码的 0~9 与用四位二进制表示的的 0~9 完全一样。

值得注意的是:4 位二进制数中的 1010~1111 不允许在 8421码中出现,因为没有十进制数字符号与其对应。此外,十进制数字符号的 8421码与相应的 ASCII码的低四位相同,这一特点有利于简化输入/输出过程中 BCD码与字符代码的转换。所以,8421码是一种人机联系是广泛使用的中间形式。

需要特别注意的是 8421码与十进制数之间的转换是按位进行,即十进制数的每一位与 4 位二进制编码对应。

Stone 最近学习数字逻辑耽误了很多事情,但是直到考试结束了他还是不知道求一个数的 8421码,现在给你一个十进制的数,你能帮他求出这个数的 8421码吗?

Input

输入数据有多组(数据组数不超过 10000),到 EOF 结束。
每组输入一个正整数 n (n < 10^100)。

Output

对于每组数据,输出它的 8421码,相邻位之间以空格隔开,最低位后没有空格。

Example Input

251208

Example Output

0010 01010001 0010 0000 1000

Hint

Author

「2016年第六届ACM趣味编程循环赛 Round #3」Stone

把n按位分离转二进制

如:1234

1 0001

2 0010

3 0011

4 0100

1234:0001 0010 0011 0100 

#include <stdio.h>#include <cmath>#include <string.h>using namespace std;char s[100];void print(int x){    for(int i = 3; i>=0; --i)    {        int k = pow(2,i);        if(x/k)        {            printf("1");            x%=k;        }        else printf("0");    }}int main(){    while(~scanf("%s", s))    {        int len = strlen(s);        for(int i = 0; i<len; ++i)        {            print(s[i]-'0');            if(i==len-1)printf("\n");            else printf(" ");        }    }    return 0;}


0 0
原创粉丝点击