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;
} 
写了一万年
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于一个数n,我们可以将其拆分成若干组数位相同的数字,然后读出每一组数字的数值和单位。例如: - 对于 123456789,我们可以将其拆分成 1 亿,2345 万,6789。 - 对于 200000,我们可以将其拆分成 2 十万。 具体的读法可以参考以下规则: - 对于 1~9 的数字,直接读出其汉字,如 1 读作“一”,9 读作“九”。 - 对于 10~99 的数字,读出十位数的汉字,如果个位数不为 0,则加上个位数的汉字,如 22 读作“二十二”,55 读作“五十五”。 - 对于 100~999 的数字,读出百位数的汉字,如果十位数为 0,则只读出“几百”,否则在“几百”后加上十位数和个位数的汉字,如 234 读作“二百三十四”,707 读作“七百零七”。 - 对于 1000~9999 的数字,读出千位数的汉字,如果百位数为 0,则只读出“几千”,否则在“几千”后加上百位数、十位数和个位数的汉字,如 5678 读作“五千六百七十八”。 - 对于 10000~99999 的数字,读出万位数的汉字,如果千位数为 0,则只读出“几万”,否则在“几万”后加上千位数、百位数、十位数和个位数的汉字,如 12345 读作“一万二千三百四十五”。 - 对于 100000~999999 的数字,读出十万位数的汉字,如果万位数为 0,则只读出“几十万”,否则在“几十万”后加上万位数、千位数、百位数、十位数和个位数的汉字,如 234567 读作“二十三万四千五百六十七”。 - 对于 1000000~99999999 的数字,读出百万位数的汉字,如果十万位数为 0,则只读出“几百万”,否则在“几百万”后加上十万位数、万位数、千位数、百位数、十位数和个位数的汉字,如 12345678 读作“一千二百三十四万五千六百七十八”。 - 对于 100000000~999999999 的数字,读出亿位数的汉字,如果百万位数为 0,则只读出“几亿”,否则在“几亿”后加上百万位数、十万位数、万位数、千位数、百位数、十位数和个位数的汉字,如 987654321 读作“九亿八千七百六十五万四千三百二十一”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值