[PTA] 7-23 币值转换(20 分)
来源:互联网 发布:使命召唤 知乎 编辑:程序博客网 时间:2024/05/17 00:53
7-23 币值转换(20 分)
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式: 输入在一行中给出一个不超过9位的非负整数。
输出格式: 在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1: 813227345
输出样例1: iYbQdBcScWhQdBeSf
输入样例2: 6900
输出样例2: gQjB
**这是一个我自认为是对的程序 **
updated:解决了输入0;
说到这我突然想起来这段代码还有不健全的地方就是”10“应该是”十“而不是”一十“,而其他情况都是”一十“,我还没考虑前者。不过测试点没这个,侥幸过了2333 。我回去小改一下。
//原来我出错的测试点是输入0的时候#include <iostream>#include <string>#include <cstring>using namespace std;//字符->数字inline int toNum(char c) { return static_cast<int>(c-'0');}int ecx(string &s) { if(s.size()==9) { //考虑到这种情况100000001,这里的”万“是没有的,即,壹亿零壹 //而除了这种情况,大于9999的时候必有”万“ if(s[1]=='0' && s[2]=='0' && s[3]=='0' && s[4]=='0') { return 1; } else return 0; } else return 0;}int main() { int index1,index2,temp=-1, h=0; string input; cin >> input; char res[30]; memset(res,'\0',sizeof(char)*30); char num[10]={'a','b','c','d','e','f','g','h','i','j'}; char unit[10]={'\0','\0','S','B','Q','W','S','B','Q','Y'}; auto len = input.size(); //这里零都会重复,且除了零之外每一位都有后接的单位 for(auto i=0; i!=len; ++i) { char c=num[toNum(input[i])]; res[h] = c; if((c!='a' && i!=len-1) || (len-i==5 && !ecx(input))) res[++h] = unit[len-i]; ++h; } //index1记录从后往前数不为零的地方,并忽略之 //解决”63000“此类的问题 for(int i=strlen(res)-1; i>=0; --i) { if(res[i]!='a') { index1 = i+1; break; } } //此处记录在res中”万“的位置,没有的话就是原值-1 for(int i=strlen(res)-1; i>=0; --i) { if(res[i]=='W') { temp = i; break; } } //与之前原理类似,从”十万“位开始找,找到第一个不是0的 //解决了这种情况”69000000“,不处理这个的话,会变成六千九百零万 if(temp!=-1) { for(int i=temp-1; i>=0; --i) { if(res[i]!='a') { index2 = i+1; break; } } } //前面的两句控制前面的情况,输出的时候控制如果此时是0,下一个不是0就输出一个零 for(int i=0; i<strlen(res); ++i) { //当只有一位的时候,有情况0,如果不单列,就会没有结果 if(i==index1 && lenRes!=1) break; if(temp!=-1) { if(i>=index2 && i<temp) continue; } if(res[i]=='a' && res[i+1]!='a') { cout<<'a'; } if(res[i]!='a') cout<<res[i]; } return 0;}
代码写的很糟糕,通用性较差,但AC总有一测试点过不去,遂查询,发现有一个类似的疑问:[一亿零零一???](http://blog.csdn.net/ccDLlyy/article/details/52070666)
来自ccDLlyy的博客
不知是不是bug了。
是我naive了!
阅读全文
0 0
- [PTA] 7-23 币值转换(20 分)
- 7-23 币值转换(20 分)
- 7-23 币值转换(20 分)
- 5-23 币值转换 (20分)
- 5-23 币值转换 (20分)
- 5-23 币值转换 (20分)
- 5-23 币值转换 (20分)
- 5-23 币值转换 (20分)c语言版
- -PAT-java-5-23 币值转换 (20分)
- 5-49 币值转换 (20分)
- 5-23 币值转换
- 5-23 币值转换*
- 循环-19. 币值转换(20)
- 循环-19. 币值转换(20)
- 循环-19. 币值转换(20)
- 循环-19. 币值转换(20)
- 循环-19. 币值转换(20)
- 7-1 一元多项式求导(20 分)PTA
- 欢迎使用CSDN-markdown编辑器
- python 基本数据类型简介
- python中lambda的使用
- bootstrapTable中怎么让某些列隐藏
- ztree:数据字典树,右键菜单
- [PTA] 7-23 币值转换(20 分)
- Ubuntu 安装 MongoDB 详细过程
- 二维码扫描控件
- kafka开发笔记
- 笔记:时间戳和日期相互转换
- 笔记:css3 transition 实现div宽度以中心为原点向两边伸长
- avformat_open_input函数分析
- WOJ1008-Feeding Animals(II)
- HDU1520 Anniversary party —— 树形DP