南邮 OJ 2067 数数
2015-08-08 10:52
387 查看
数数
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 44 测试通过 : 19
比赛描述
数数
将中文数字的拼音字符串转为最终的数字;每个字拼音的首字母大写,比如:JiuWanJiuQianJiuBaiJiuShiJiu表示九万九千九百九十九,即阿拉伯数字,99999。你当然记得每个数字的汉语拼音,但是还是提示你一下,Ling、Yi、Er、San、Si、Wu、Liu、Qi、Ba、Jiu、Shi、Bai、Qian、Wan。
为简单起见,我们要处理的数字在10万以内,不含负数,十、百、千、万等单位前面一定有数字,如YiShi表示10。
输入
包含多组测试样例,每组为中文数字的拼音字符串。
输出
对每个样例输出对应的阿拉伯数字
样例输入
SanBaiLingWu
JiuWanJiuQianJiuBaiJiuShiJiu
样例输出
305
99999
提示
undefined
题目来源
HW编码大赛
#include<iostream> #include<string> using namespace std; int number(string s){ if("Yi"==s){ return 1; }else if("Er"==s){ return 2; }else if("San"==s){ return 3; }else if("Si"==s){ return 4; }else if("Wu"==s){ return 5; }else if("Liu"==s){ return 6; }else if("Qi"==s){ return 7; }else if("Ba"==s){ return 8; }else if("Jiu"==s){ return 9; }else{ return -1; } } int main(){ string str,s; int a[5]; int i,n,num,index; bool LingFlag=0; while(cin>>str){ index = 0; n = (int)str.length(); for(i=0;i<5;++i){ a[i] = 0; } s.clear(); for(i=0;i<n;++i){ s += str[i]; if(i+1==n || str[i+1]>='A'&& str[i+1]<='Z'){//接收到完整汉子拼音 if("Wan"==s){ a[4] = num; num = 0; LingFlag = 0; index = 4; }else if("Qian"==s){ a[3] = num; num = 0; LingFlag = 0; index = 3; }else if("Bai"==s){ a[2] = num; num = 0; LingFlag = 0; index = 2; }else if("Shi"==s){ a[1] = num; num = 0; LingFlag = 0; index = 1; }else if("Ling"==s){ LingFlag = 1; }else{ num = number(s); } s.clear(); } } if(index<=1 || LingFlag){ a[0] = num; }else if(index>1){ a[--index] = num; } for(i=4;!a[i] && i>=0;--i); while(i>=0){ cout<<a[i--]; } cout<<endl; } }
相关文章推荐
- Debian8下搭建IVRE(docker方式)
- Adobe Dreamweaver CS6 下载及破解教程
- 类与对象(一)
- 南邮 OJ 2066 好奇的奥利安娜
- Parcelable和Serializable的区别
- 硬盘性能测试DD命令详解
- K-均值聚类算法
- SecureCRT中文显示乱码
- 南邮 OJ 2064 哥德巴赫猜想
- svn : 如果自己忘了自己服务器上的svn库url和口令
- 学习笔记:利用GeoServer结合uDig发布WMS详细过程
- Java基础-IO-字符输入输出流(笔记)
- cocos2dx-多点触控
- 搜素题解
- IETester和DebugBar的安装与使用
- C++连接mysql数据库的两种方法
- [Android Studio]AS的常用配置
- HDOJ-1075 What Are You Talking About 字典树
- CXF学习(一)---SOA
- leetcode 1 Two Sum