Problem Description

一天,一个小会计接到了一个重活,就是填写票据上的大写金额,这可把他忙得不可开交。

人民币大写金额的几条规则如下:
数字中 0~9 对应大写写法分别为:零壹贰叁肆伍陆柒捌玖(读音不变),且整个金额基本按照习惯上的读法来写。
数字金额上最高位为十位或十万位,且最高位上的数为「1」时,「壹」不可省略。如 15 元,大写金额格式为:壹拾伍元整。
数字金额中间有「0」时,大写金额要写「零」字。如 1024 元,大写金额格式为:壹仟零贰拾肆元整。
数字金额中间有连续的几个「0」时,大写金额中间只写一个「零」字,如 2008 元,大写金额格式为:贰仟零捌元整。
——相关规则摘自《正确填写票据和结算凭证的基本规定》,并根据题目需要稍作简化和修改

小会计从网上买到了一堆传说中能召唤出 ACMer 的「Accepted」标记,如果你能帮他完成数字金额转大写金额的任务,他会送给你一个的。
现在,他会提供给你数字金额,你只需要将转换后金额的拼音发给他就可以了。
Input

输入数据有多组(数据组数不超过 10000),到 EOF 结束。
每组数据输入一行,包含一个小于 1 亿的非负整数,代表要转换的数字金额。
Output

对于每组输入,输出一行,代表用拼音表示的转换后的大写金额。拼音之间用空格隔开。
Example Input

15
1024
2008
602333
9
7000999
10
1000
Example Output

yi shi wu yuan zheng
yi qian ling er shi si yuan zheng
er qian ling ba yuan zheng
liu shi wan ling er qian san bai san shi san yuan zheng
jiu yuan zheng
qi bai wan ling jiu bai jiu shi jiu yuan zheng
yi shi yuan zheng
yi qian yuan zheng
Hint

Author

「2016年第六届ACM趣味编程循环赛 Round #1」bLue
Think:字符串+循环的题。入手不难知道要对金额%取余,至0,中间的数据要存起来。我是把数据存在二维的字符串里,之后再根据大写金额的阅读方法来输出,这这点,是最大的难点。主要的是考虑金额中0出现的位置,比如1、10、101、100100等等数据,另外发现在0出现在“万”的前后还要进行一次特判(把情况考虑完整确实挺耗时间的,所以要耐心分析,首先根据题意要求以及题目里的样例的特殊情况的输出“提示”来完善自己考虑的情况)。

C语言代码如下:

#include<stdio.h>
#include<string.h>
int main()
{int n;while(scanf("%d", &n) != EOF){if(!n){  //先把金额为0的特殊情况解决printf("ling yuan zheng\n");continue;  }char s[110][110];  //根据题目数据范围,这个字符串数组可以再适当缩小int i = 1;while(n){switch(n % 10){case 0:strcpy(s[i], "ling");break;  //赋值case 1:strcpy(s[i], "yi");break;case 2:strcpy(s[i], "er");break;case 3:strcpy(s[i], "san");break;case 4:strcpy(s[i], "si");break;case 5:strcpy(s[i], "wu");break;case 6:strcpy(s[i], "liu");break;case 7:strcpy(s[i], "qi");break;case 8:strcpy(s[i], "ba");break;case 9:strcpy(s[i], "jiu");break;}n /= 10; //例如N = 102, N/=10 之后N = 10if(n){  //如果此时N不为0i++;switch(i){case 2:strcpy(s[i], "shi");break;  //不解释case 4:strcpy(s[i], "bai");break;case 6:strcpy(s[i], "qian");break;case 8:strcpy(s[i], "wan");break;case 10:strcpy(s[i], "shi");break;case 12:strcpy(s[i], "bai");break;case 14:strcpy(s[i], "qian");break;case 16:strcpy(s[i], "yi");break;}i++; //不要忘了,因为N尚且不为0,还要一波操作}}int len = i;for(i = len; i >= 1; i--){  //从字符串的尾部开始读取if(strcmp(s[i], "ling") == 0){ //当前为0的一波特判if(i == 1){                //建议自己先思考10分钟,在纸上                                         break;               //列出情况再看看自己有没有漏情况}else if(strcmp(s[i - 1], "wan") == 0){i--;printf("%s ", s[i]);if(strcmp(s[i - 1], "ling") != 0)printf("ling ");}else if(strcmp(s[i - 2], "ling") == 0){i--;}else{printf("%s ", s[i]);i--;}}else printf("%s ", s[i]);  //不为0“直接”输出}printf("yuan zheng\n");  //把“固定”的内容最后统一输出解决}return 0;
}

郁闷的会计(非负整数转换成大写金额的拼音)相关推荐

  1. 工具篇——MoneyFormatUtil(用于将人民币小写金额转换成大写金额)

    写代码的四点: 1.明确需求.要做什么? 2.分析思路.要怎么做?(1,2,3--) 3.确定步骤.每一个思路要用到哪些语句.方法和对象. 4.代码实现.用具体的语言代码将思路实现出来. 学习新技术的 ...

  2. 使用SQL创建把数字转换成大写金额

    SQL Server 把数字转换成大写金额,之前在网上找了一个,但是其中没有超过1000元的时候,第一位会有显示一个"仟",SQL 已经优化,但感觉好像还可以优化,请诸位再优化一下 ...

  3. PB中小写金额转换成大写金额(发票类型)

    PB中小写金额转换成大写金额 //================================================================= // 功能:小写金额转换成大写金额 ...

  4. Java工具包:小写金额转换成大写金额

    源代码如下 package com.jian.stringUtil;/*** 工具类:小写金额转换成大写金额* * @author jianxuanbing* */ @SuppressWarnings ...

  5. 小写金额转换成大写金额的函数

    编写一个收费软件时要用到一个小写金额转换成大写金额的函数,我曾在网上找到一个用Powerbuilder写的函数,长达四五十行之巨,后来我自己用DELPHI写了一个函数,寥寥几行代码就搞定: funct ...

  6. 非常经典的JS,数字转换成大写金额函数

    引用内容:     <script   language="javascript">     <!--     //   数字转换成大写金额函数     func ...

  7. 数值转换成大写金额运算

    在记账时,我们经常用大写汉字代替数字进行记账,而我们在数值运算时往往是采用的阿拉伯数字进行的计算,这时我们就需要用到将阿拉伯数值转换成大写金额的数值转换工具,而这篇代码讲的就是这种数值换算运算. 它的 ...

  8. 使用javabean把小写金额转换成大写金额

    public static void main(String[] args) {moneyConversion mc=new moneyConversion();String money=" ...

  9. 将数字转换成大写金额

    /// /// 转换数字金额主函数(包括小数) /// /// 数字字符串 /// 转换成中文大写后的字符串或者出错信息提示字符串 public string ConvertSum(string st ...

最新文章

  1. 继承和多态 3.0 -- 菱形继承
  2. 二自由度云台扫描算法_二自由度云台的机器视觉控制
  3. tensorflow生产环境部署
  4. python做商品推荐系统_一种商品智能推荐系统的设计的制作方法
  5. opencv 通过网络连接工业相机_单目摄像机测距(python+opencv)
  6. 创业动力衰减 中国面临危险挑战
  7. python创建时间序列_python时间序列按频率生成日期
  8. 四川大学mac用户登陆锐捷校园网指南
  9. NB-IoT无线通信模块与Lora无线通信协议技术分析与前景展望
  10. PS的钢笔,路径,选取,描边(虚线)
  11. mintUI MessageBox confirm弹框确认和取消按钮的使用-回调
  12. 华山论剑 | 弓叶、陶朗等四家企业再生PET分选技术圆桌会议
  13. JavaScript中的常用浏览器对象
  14. 1命名规则 sentinel_哨兵-1A数据命名规则
  15. 读《杨振宁传》---谈taste
  16. 锐捷ac怎么发现局域网ap_【实战】锐捷AC+AP配置WLAN基本服务系列
  17. vue-cli3访问public文件夹静态资源的报错解决
  18. Ubu开启ftp服务 启用root用户登录
  19. 人工智能发展文献检索报告
  20. 构建智慧B2B集采商城系统,实现房地产行业采购业务的集中管控

热门文章

  1. Vue自定义组件并引入
  2. 数据挖掘xgb使用总结
  3. 一入wine深似海,从此奋战到天明
  4. 使用Navicat进行ssh通道连接MySQL数据库
  5. linux安装ssh和开启 ssh服务
  6. 数字先锋 | 随时随地云端阅片,“云胶片”时代来啦!
  7. 学生个人主页网站模板下载 个人简历网页制作 个人博客网页设计作4网页精选
  8. Linux关闭端口的命令
  9. 反序列化时,java类需要无参构造函数
  10. 利用静态队列实现订餐取餐系统