南邮 OJ 2067 数数

数数

时间限制(普通/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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值