SICNU_ACM第二次天梯赛选拔
8421 BCD码(15分)
题目: 输入样例:
0101010110001001
输出样例:
5589
AC代码:
#include<bits/stdc++.h> using namespace std; int x,ln,f = 0; int a[10010]; int ch(char s[5]){ //cout<<s<<endl; if(!strcmp(s,"0000")) return 0; if(!strcmp(s,"0001")) return 1; if(!strcmp(s,"0010")) return 2; if(!strcmp(s,"0011")) return 3; if(!strcmp(s,"0100")) return 4; if(!strcmp(s,"0101")) return 5; if(!strcmp(s,"0110")) return 6; if(!strcmp(s,"0111")) return 7; if(!strcmp(s,"1000")) return 8; if(!strcmp(s,"1001")) return 9; return 0; } int main(){ char ss[4]; string s; cin>>s; int len = s.size(); if(len%4!=0){ x = len/4 +1; if(4-len%4==1){ ss[0] =0,ss[1] = s[0],ss[2] = s[1],ss[3]= s[2],ss[4] = ; }else if((4-len%4)==2) ss[0] =0,ss[1]=0,ss[2] = s[0],ss[3] = s[1],ss[4]= ; else if((4-len%4)==3) ss[0] = 0,ss[1]= 0,ss[2] = 0,ss[3]= s[0],ss[4]= ; a[1] = ch(ss); } else x = len/4; ln = x; for(int i = len-1,j = 3; i >= len%4; i--,j--){ ss[j] = s[i]; if(j==0){ ss[4] = ; a[x--] = ch(ss); j = 4; } } for(int i =0 ; i < len;i++) if(s[i]!=0) f = 1; if(f==0){ cout<<0; return 0; } int ff = 0; for(int i = 1; i <= ln;i++){ if(a[i]!=0&&ff==0) ff = 1; //找到第一个不等于零的数 if(ff) cout<<a[i]; } return 0; }
总结: 富贵险中求。
1.字符数组 一定要给它设置结尾的标志(’ ’ )不然 会乱码的 2.strcmp 只能直接比较(“1111’,”1111“)这样的字符串或者字符数组,不支持直接比较string类型 3.因为是转换为一个十进制的数 要切记要去除前导零 4.全零输出一个零
❤ 附赠 acm某知名涛姓大佬的得瑟代码改编版:
#include<bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; while((int)s.size()%4) s = "0"+ s; //这里记得是字符串的拼接 双引号 //字符串长度函数 得把返回值强制转换为int型 int t = 0,ok = 0;; for(int i = 0; i < (int)s.size();i++){ //精髓! t = t*2 + (s[i] - 0); //转为十进制 if((i+1)%4==0){ if(t) cout<<t,ok = 1; else if(ok) cout<<t; t =0; } } if(!ok) puts("0"); return 0; }
上一篇:
IDEA上Java项目控制台中文乱码