考慮一些特殊情況
1、110000 讀作 十一萬 而不是一十一萬
2、1010 讀作一千零一十 而不是一千零十
3、我們要考慮在特殊位上的數字 比如說 十萬位 當十萬位前面沒有數的時候 它讀十 而不是 一十
4、考慮0的讀法 如果0 在萬位、個位、以及億位的時候都不需要讀
5、如果有兩個連續的0則只讀前面一個 1001 讀左一千零一 而不是一千零零一
6、11讀作十一 而不是一十一,所以考慮十位上的數字,並且它前面沒有數字的時候讀十一
7、萬位上的數字如果它前面的十萬,百萬,千萬位都是0,那麼“萬”字就不用輸出
#include<iostream>
#include<string>
using namespace std;
void chu(int num)
{
switch(num)
{
case 1:cout<< "yi";break;
case 2:cout<< "er";break;
case 3:cout<< "san";break;
case 4:cout<< "si";break;
case 5:cout<< "wu";break;
case 6:cout<< "liu";break;
case 7:cout<< "qi";break;
case 8:cout<< "ba";break;
case 9:cout<< "jiu";break;
case 0:cout<< "ling";break;
}
}
void danwei(int num)
{
switch(num)
{
case 0:cout<< "qian ";break;
case 1:cout<< "bai ";break;
case 2:cout<< "shi ";break;
}
}
int main()
{
int n;
cin>>n;
int one,two,three;
one=n/100000000;
two=n/10000%10000;
three=n%10000;
if(one!=0)
{
int one_n[5];
one_n[1] =one%10;//2
one_n[0] =one/10;//1
for(int i=0;i<2;i++)
{
if(one_n[i]==0)
continue;
else
{
if(i==0)
{
if(one_n[i]!=1)
{
chu(one_n[i]);
cout<<" ";
}
cout<<"shi ";
}
else
{
chu(one_n[i]);
cout<<" ";
}
}
}
}
if(one!=0)
cout<<"yi ";
if(two!=0)
{
int one_n[5];
one_n[0] =two/1000;//1
one_n[1] =two/100%10;//2
one_n[2] =two/10%10;//3
one_n[3] =two%10;//1
for(int i=0;i<4;i++)
{
if(one_n[i]==0)
continue;
else
{
if((one_n[i-1]==0)&&(i!=0)&&one!=0)
cout<<"ling ";
if(one==0&&i==0)
{
if(one_n[i]!=1)
{
chu(one_n[i]);
cout<<" ";
}
cout<<"shi ";
}
else
{
chu(one_n[i]);
cout<<" ";
}
danwei(i);
}
}
}
if(two!=0)
cout<<"wan ";
if(three!=0)
{
int one_n[5];
one_n[0] =three/1000;//1
one_n[1] =three/100%10;//2
one_n[2] =three/10%10;//3
one_n[3] =three%10;//1
for(int i=0;i<4;i++)
{
if(one_n[i]==0)
continue;
else
{
if((one_n[i-1]==0)&&(i!=0))
cout<<"ling ";
chu(one_n[i]);
if(i!=3)
cout<<" ";
danwei(i);
}
}
}
return 0;
}
75%AC