南郵OJ 2067数


数をかぞえる
時間制限(一般/Java) : 
1000 MS/ 3000 MS          実行メモリ制限:65536 KByte
総提出:44           試験合格:19 
試合の説明
数をかぞえる
中国語の数字のピンイン文字列を最後の数字に変えます。各単語のピンインの頭文字は大文字で、例えば、JiuWanJiuQianJiuBaiJiuShiJiuは九万九千九百九十九を表しています。つまり、アラビア数字です。9999。
もちろん数字ごとに中国語ピンインを覚えていますが、Ling、Yi、Er、San、Si、Wu、Liu、Qi、Ba、Jiu、Shi、Bai、Qian、Wanを教えてくれます。
簡単のために、私達が処理したい数字は10万以内で、マイナス数をくわえないで、10、百、千、万などの単位の前に必ず数字があります。
入力
複数のテストサンプルを含み、各グループは中国語の数字のピンイン文字列である。
出力
各サンプルに対応するアラビア数字を出力します。
サンプル入力
SanBaiLinWu JiuWanJiuQianJiuBaiJiuShiJiu
サンプル出力
305 9999
ヒント
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;
	}
}