【经典算法】:银行金额大写转换
说明
//你很可能看不懂我写的什么,但是代码可以直接用,不用谢我
这篇文章的起因是我想写一个编译原理的工具,后来我顺便想到了字符对应,于是我脑洞大开,就想到了这个银行大写金额转换的工具。
思路跟我的上篇博客那个罗马数字的转换也是一回事
噢,对了,为了防止来到本博客的小伙伴还不知道我讲的什么,我决定讲下这个程序的功能。
实现了 把银行票据上的数字转换为中文金额
比如: 输入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 会输出 壹亿零万壹
综上所述,此程序还是很好的,放心使用
【经典算法】:银行金额大写转换相关推荐
- java银行金额大写转换_Java版 数字金额大写转换
package com.utils; public class Change { public static void main(String agrs[]) { //整数 System.out.pr ...
- Python实现银行金额大写汉字转换【简单易懂,代码可以直接运行】
Python实现银行金额大写汉字转换[简单易懂] 业务需求: •银行电子支票业务在金额部分需要使用大写的汉字,因此需要将用户录入的数字信息转变为汉字. •目前只需完成1~5位整数转换即可. 关键技术分 ...
- Python实现银行金额大写汉字转换【简单易懂】!!
Python实现银行金额大写汉字转换[简单易懂] 业务需求: •银行电子支票业务在金额部分需要使用大写的汉字,因此需要将用户录入的数字信息转变为汉字. •目前只需完成1~5位整数转换即可. 关键技术分 ...
- Python银行金额大写汉字转换
Python银行金额大写汉字转换 业务需求: 银行电子支票业务在金额部分需要使用大写的汉字,因此需要将用户录入的数字信息转变为汉字. • 目前只需完成1~5位整数转换即可. 示例: 输入金额:> ...
- 算法的深层次知识是数学,这些常用的互联网经典算法应用案例,你知道几个?
前言 在文章初始,我们来思考一个很有意思的问题:一滴水从很高很高的空中自由落体下来,会不会砸伤人? 能够砸伤人则需要水滴具有的动能,即公式(1/2)mv^2,而水滴的质量是一定的,需要达到很高的速度时 ...
- JAVA经典算法50题(转)
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1] 题目:古典问题:有一对兔子, ...
- 上手机器学习,从搞懂这十大经典算法开始
上手机器学习,从搞懂这十大经典算法开始 翻译 | AI科技大本营(rgznai100) 参与 | 林椿眄 编辑 | 波波,Donna 在机器学习领域,"没有免费的午餐"是一个不变的 ...
- java经典50题_JAVA经典算法50题(3)【面试+工作】
原标题:JAVA经典算法50题(3)[面试+工作] JAVA经典算法50题(3)[面试+工作] [程序21] 题目:求1+2!+3!+...+20!的和. 1.程序分析:此程序只是把累加变成了累乘. ...
- 数据挖掘十大经典算法之——C4.5 算法
数据挖掘十大经典算法系列,点击链接直接跳转: 数据挖掘简介及十大经典算法(大纲索引) 1. 数据挖掘十大经典算法之--C4.5 算法 2. 数据挖掘十大经典算法之--K-Means 算法 3. 数据挖 ...
最新文章
- Android GraphicBuffer
- C#序列化与反序列化以及深拷贝浅拷贝方法
- 这不关我的事,别烦我!
- 如何使用SQL Server Microsoft Mobile Publisher创建移动仪表盘?
- 面试题--------6、String常用的方法
- 纽微特纪事:傅某为何要内斗吾?各位应该注意什么?
- 51单片机8位流水灯左移实现(比较简短)
- Java导出Excel数据错乱
- 中国互联网寒冬的根本原因是什么?
- 华为手机如何安装Goole play教程及安装包
- Vue3.x的安装和初始化
- js获取系统当前时间,实现钟表功能
- html桌面壁纸教程,Photoshop设计简易版的电脑桌面壁纸教程
- 各大IT公司校园招聘程序猿笔试、面试题集锦
- 设计模式 -- 状态模式
- 【Python】编写函数计算圆的面积
- status(状态);
- ArcGIS Pro3.0.2保姆级安装教程(附安装包)
- 2019-2020年网络攻击事件及防范网络攻击小技巧
- word2013删除下载的模板