考虑一些特殊情况
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