20.数的读法

#include<iostream>
#include<string>
using namespace std;
string b[10]={"ling ","yi ","er ","san ","si ","wu ","liu ","qi ","ba ","jiu "}; 
string func(string t){
	int l=t.length();
	string ans;
	int flag=0;
	if(l>=4){
		ans+=b[t[0]-'0'];
		ans+="qian ";
	}
	if(l>=3)
	{
		if(t[l-3]=='0')
		{
			if(t[l-2]=='0')
			{
				if(t[l-1]=='0')
				{
					return ans;
				}
				else
				{
					ans+="ling ";
					flag=1;
				}	
			}
			else
			{
				ans+="ling ";
				flag=1;
			}
		}
		else
		{
			ans+=b[t[l-3]-'0'];
			ans+="bai ";
		}    
	}
	if(l>=2){
		if(t[l-2]=='0'&&flag==0)
		{
			if(t[l-1]=='0')
			{
				return ans;
			}
			else
			{
				ans+="ling ";
				flag=1;
			}
		}
		else if(t[l-2]!='0')
		{
			if(t[l-2]=='1')
			{
				if(l!=2)
				{
					ans+="yi shi ";
				}
				else
					ans+="shi ";
			}
			else
			{
				ans+=b[t[l-2]-'0'];
				ans+="shi ";	
			}
		}
	}
	if(l>=1){
		if(t[l-1]!='0'){
			ans+=b[t[l-1]-'0'];//千万别忘了 减去'0',转化ASCI码 
		} 
	}  
	return ans;
} 
int main(){
	string num;
	cin>>num;
	int len=num.length();
	if(len==10){
		cout<<func(num.substr(0,2))<<"yi ";	
	}
	if(len==9){
		cout<<b[num[0]-'0']<<"yi ";
	}
	string sub;
	int flag=0;//是否有非0数字
	int flag2=0;//第二层检验 
	int time=0;//0是第几次出现 
	if(len>=5){
		for(int i=len-8;i<len-4;i++){
			if(i<0)continue;
			if(time==0&&flag==0&&num[i]=='0'){
				int c=0;
				for(int j=i;j<len;j++)
				{
					if(num[j]!='0')
					{
						c=1;
						break;
					}
				} 
				if(c==1)
				cout<<"ling ";
				time=1;
			} 
			if(flag==0&&num[i]=='0'){
				continue;
			}
			sub+=num[i];
			flag=1;
		}
		if(flag==1){
			cout<<func(sub)<<"wan ";
		}
		time=0;
		sub="";
		for(int i=len-4;i<len;i++){
			if(flag==1&&flag2==0&&time==0&&num[i]=='0'){
				cout<<"ling ";
				time=1;
			} 
			if(flag2==0&&num[i]=='0'){
				continue;
			}
			sub+=num[i];
			flag2=1;
		}
	}
	if(len<=4){
		sub=num;
		flag2=1;
	} 
	if(flag2==1){
		cout<<func(sub);
	}
	return 0;
} 
写了一万年

猜你喜欢

转载自blog.csdn.net/qq_37910848/article/details/79533784
今日推荐