本文共 2905 字,大约阅读时间需要 9 分钟。
//你很可能看不懂我写的什么,但是代码可以直接用,不用谢我
这篇文章的起因是我想写一个编译原理的工具,后来我顺便想到了字符对应,于是我脑洞大开,就想到了这个银行大写金额转换的工具。
思路跟我的上篇博客那个罗马数字的转换也是一回事
噢,对了,为了防止来到本博客的小伙伴还不知道我讲的什么,我决定讲下这个程序的功能。
实现了 把银行票据上的数字转换为中文金额比如: 输入31655427 就会显示 叁仟壹佰陆拾伍万伍仟肆佰二拾柒
思路如下:
1)不管金额多少位,都是4位后变成万,8位后变成亿,然后按照这个规律不断的进行循环
2)写一个四位数的输出函数c_out(); c_out实现了给出四位数就能把四位数翻译成 中文输出 3)逻辑上的控制,先把金额的各位分离,然后进行逻辑上的控制进行“万”,“亿”等字符的匹配输出技巧及注意事项:
1)分离金额,假设该数是n,用num数组去接各位int count=0;whiel(n){ num[++count] = n%10; n/=10;}
这样就能达到分离的目的了
2)关于四位数翻译函数
写的时候要注意几点 1000 会输出 壹仟 1001 会输出 壹仟零壹 这种特例要特殊考虑#includeusing namespace std;int num[100];void trans(int temp){ if(temp==1) cout<<"壹"; if(temp==2) cout<<"贰"; if(temp==3) cout<<"叁"; if(temp==4) cout<<"肆"; if(temp==5) cout<<"伍"; if(temp==6) cout<<"陆"; if(temp==7) cout<<"柒"; if(temp==8) cout<<"捌"; if(temp==9) cout<<"玖"; if(temp==0) cout<<"拾";}void c_out(int a,int b,int c,int d){ if(a!=0 && b ==0 &&c==0 &&d ==0){ trans(a); cout<<"仟"; } else if(a!=0 && b==0 && c==0 && d!=0){ trans(a); cout<<"千"; cout<<"零"; trans(d); } else if(a!=0 && b!=0 &&c==0 &&d==0){ trans(a); cout<<"仟"; trans(b); cout<<"佰"; } else if(a==0 && b!=0){ trans(b); cout<<"佰"; if(c==0)trans(c); else{ trans(c); cout<<"拾"; } if(d==0){} else{ trans(d); } } else if(a==0 && b==0 && c!=0) { trans(c); cout<<"拾"; if(d==0){} else{ trans(d); } } else if(a==0 && b==0 && c==0) trans(d); else{ trans(a); cout<<"仟"; if(b==0)trans(b); else{ trans(b); cout<<"佰"; } if(c==0)trans(c); else{ trans(c); cout<<"拾"; } if(d==0){} else{ trans(d); } }}void separate(int n){ int d = n%10; int c = n/10%10; int b = n/100%10; int a = n/1000; c_out(a,b,c,d);}int main(){ int n,count=0; cin>>n; while(n){ num[++count] = n%10; n/=10; } int left = count%4; if(left!=0){ for(int i=count+1;i<=count+4-left;i++){ num[i] = 0; } i = count+4-left; c_out(num[i],num[i-1],num[i-2],num[i-3]); for(i=count-left;i>0;i-=4){ if(i%8==0) cout<<"亿"; if(i%8==4) cout<<"万"; c_out(num[i],num[i-1],num[i-2],num[i-3]); } } if(left==0){ int i = count; c_out(num[i],num[i-1],num[i-2],num[i-3]); for(i=count-left-4;i>0;i-=4){ if(i%8==0) cout<<"亿"; if(i%8==4) cout<<"万"; c_out(num[i],num[i-1],num[i-2],num[i-3]); } }}
优点:
1)能实现%99的票据内容转换,日常应用没有问题 2)简单方便问题:
1)我用的是Int型存储银行金额,所以位数不能超过int型的位数 2)有些金额中间空一大串0没有输出最正统的中文格式,但是还是对的,比如 10000 0001 会输出 壹亿零万壹综上所述,此程序还是很好的,放心使用