南邮 OJ 2067 数数

来源:互联网 发布:java如何一行输出 编辑:程序博客网 时间:2024/05/21 09:36

数数

时间限制(普通/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;}}


0 0