【经典算法】:银行金额大写转换
来源:互联网 发布:小号 软件 编辑:程序博客网 时间:2024/06/15 17:25
说明
//你很可能看不懂我写的什么,但是代码可以直接用,不用谢我
这篇文章的起因是我想写一个编译原理的工具,后来我顺便想到了字符对应,于是我脑洞大开,就想到了这个银行大写金额转换的工具。
思路跟我的上篇博客那个罗马数字的转换也是一回事
噢,对了,为了防止来到本博客的小伙伴还不知道我讲的什么,我决定讲下这个程序的功能。
实现了 把银行票据上的数字转换为中文金额
比如: 输入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 会输出 壹仟零壹
这种特例要特殊考虑
代码(直接用吧,写的复杂,一下讲不明白)
#include <iostream>using 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 会输出 壹亿零万壹
综上所述,此程序还是很好的,放心使用
0 0
- 【经典算法】:银行金额大写转换
- 银行金额大写算法(支持负数)
- 银行金额小写转大写
- 非常经典的JS,数字转换成大写金额函数
- 经典数字转换成大写金额函数 (测试可用)
- 金额大写转换
- 金额大写转换
- 金额大写转换函数
- 大写金额转换函数
- 金额的大写转换
- 金额大写转换
- 金额转换为大写
- 金额转换为大写
- 金额大写转换
- 金额转换成大写
- 金额转换大写
- 人民币大写金额转换
- 金额转换大写[java]
- Eclipse插件开发CleanUp
- 等待执行:time.sleep()和implicitly_wait()
- 日志
- php 学习网站
- Android代码规范参考指南
- 【经典算法】:银行金额大写转换
- iOS调用系统发短信功能详解
- Android监听程序进入后台,或者恢复到前台
- 字符数组和字符指针的区别
- http 301 和 302的区别
- iOS9 HTTP 不能正常使用的解决办法
- MFC中怎么导入不了bitmap资源图片
- 按照日期降序排序,取前五条数据
- torch7实践