数数
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 44 测试通过 : 19
总提交 : 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;
}
}