标签:
描述:给定一串数字,进行BCD编码,编码完成后以8Bit为单位输出对应的十进制数值,如果给定字符串是奇数位,编码时需要在最高位补0.
简单BCD码:十进制数值0~9,分别对应4bit二进制编码 0000~1001
给定数字串1234,对应BCD码为0001,0010,0011,0100,以8bit为单位输出十进制数值为:18 52
给定数字串123,对应BCD码为0000 0001 0010 0011(最高位补0),由高位开始以8bit为单位输出十进制数值为:135
输入:只考虑输入串是正整数且位数不超过10位的情况,异常不考虑。
输出:输出时不需要空格间隔。
样例输入 :123
样例输出: 135
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <iostream> 4 #include <math.h> 5 char* BCDChange(char a) 6 { 7 switch (a) 8 { 9 case ‘0‘: 10 return "0000"; 11 break; 12 case ‘1‘: 13 return "0001"; 14 break; 15 case ‘2‘: 16 return "0010"; 17 break; 18 case ‘3‘: 19 return "0011"; 20 break; 21 case ‘4‘: 22 return "0100"; 23 break; 24 case ‘5‘: 25 return "0101"; 26 break; 27 case ‘6‘: 28 return "0110"; 29 break; 30 case ‘7‘: 31 return "0111"; 32 break; 33 case ‘8‘: 34 return "1000"; 35 break; 36 case ‘9‘: 37 return "1001"; 38 break; 39 } 40 } 41 int main() 42 { 43 char input[10]="\0"; 44 char output[10]="\0"; 45 char tmp[3]="\0"; 46 scanf("%s",input); 47 int len = 4 * strlen(input); 48 char bcd[100] ="\0"; 49 for (size_t i = 0; i <strlen(input);i++) 50 { 51 char *pBCD=BCDChange(input[i]); 52 strcat(bcd,pBCD); 53 } 54 if ((strlen(bcd))%8) 55 { 56 char addstr[256] = "0000"; 57 strcat(addstr,bcd); 58 memset(bcd,0,strlen(bcd)); 59 strcpy(bcd,addstr); 60 } 61 int len_bcd = strlen(bcd); 62 printf("%s\n", bcd); 63 int a = 0; 64 for (size_t i = 0; i<strlen(bcd) ; i = i+ 8) 65 { 66 a = 0; 67 memset(tmp, 0, strlen(tmp)); 68 size_t j = 0; 69 for (j = 0; j <8;j++) 70 { 71 if (bcd[i+j]==‘1‘) 72 { 73 a = a + (int)pow(2, 7-j); 74 75 } 76 } 77 _itoa(a, tmp, 10); 78 strcat(output, tmp); 79 } 80 printf("%s\n",output); 81 getchar(); 82 getchar(); 83 return 0; 84 }
标签:
原文地址:http://www.cnblogs.com/jingliming/p/4439732.html