1082. Read Number in Chinese (25)

Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way. Output "Fu" first if it is negative. For example, -123456789 is read as "Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu". Note: zero ("ling") must be handled correctly according to the Chinese tradition. For example, 100800 is "yi Shi Wan ling ba Bai".

Input Specification:

Each input file contains one test case, which gives an integer with no more than 9 digits.

Output Specification:

For each test case, print in a line the Chinese way of reading the number. The characters are separated by a space and there must be no extra space at the end of the line.

Sample Input 1:

-123456789

Sample Output 1:

Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu

Sample Input 2:

100800

Sample Output 2:

yi Shi Wan ling ba Bai

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
int main(){
	string unit[]={" ","Shi","Bai","Qian"};
	string number[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
	int val;
	scanf("%d",&val);
	if(val==0){
		printf("ling\n");
		return 0;
	}
	int flag;
	if(val<0){
		flag=1;
		val*=-1;
	}else{
		flag=0;
	}
	vector<int>vt[3];
	int tmp=val;
	int i=0;
	while(tmp!=0){
		vt[i].push_back(tmp%10);
		tmp=tmp/10;
		if(vt[i].size()==4){
			i++;
		}
	}
	vector<string>result;
	vector<int>t;
	if(vt[2].size()>0){
		t=vt[2];
		result.push_back(number[t[0]]);
		result.push_back("Yi");
	}
	if(vt[1].size()>0){
		t=vt[1];
		int size = t.size();
		int i=size-1;
		int index=0;
		while(t[i]==0){
			index=1;
			i--;
		}
		int index1=0;
		for(;i>=0;i--){
			if(t[i]==0){
				index1=1;
				continue;
			}
			if(index==1||index1==1){
				result.push_back("ling");
				index=0;
				index1=0;
			}
			result.push_back(number[t[i]]);
			if(i!=0)
				result.push_back(unit[i]);	
		}
		if(index==0){
			result.push_back("Wan");
		}
	}
	if(vt[0].size()>0){
		t=vt[0];
		int size = t.size();
		int i=size-1;
		int index=0;
		while(t[i]==0){
			index=1;
			i--;
		}
		int index1=0;
		for(;i>=0;i--){
			if(t[i]==0){
				index1=1;
				continue;
			}
			if(index==1||index1==1){
				result.push_back("ling");
				index=0;
				index1=0;
			}
			result.push_back(number[t[i]]);
			if(i!=0)
				result.push_back(unit[i]);	
		}		
	}
	int size=result.size();
	if(flag==1){
		cout<<"Fu ";
	}
	cout<<result[0];
	for(i=1;i<size;i++){
		cout<<' '<<result[i];
	}
	cout<<endl;
	return 0;
}

  




posted @ 2017-12-01 14:02  gaoren  阅读(175)  评论(0编辑  收藏  举报