题目
https://pintia.cn/problem-sets/994805342720868352/problems/994805385053978624
注意
102345读作10万零两千三百四十五,
100002345读作一亿零两千三百四十五
所以下面这行代码,我把原来的j!=0删掉了
if(!zero&&j!=0&&n/J[curpos]>=10) zero=true;
当然,这个地方其实是有争议的,但删不删都能通过,说明出题人为了避免歧义就没有设置相关的测试点
AC代码
#include<bits/stdc++.h>
using namespace std;
string num[10] = { "ling","yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
string c[6]={"Ge","Shi","Bai","Qian","Yi","Wan"};
int J[]={1,10,100,1000,10000,100000,1000000,10000000,100000000};
int main()
{
int n;
cin>>n;
if(n==0)
{
cout<<"ling";
return 0;
}
if(n<0)
{
cout<<"Fu ";
n=-n;
}
int part[3];
part[0]=n/100000000;
part[1]=(n/10000)%10000;
part[2]=n%10000;
int zero=false,flag=0;
for(int i=0;i<3;i++)
{
int tmp=part[i];
for(int j=3;j>=0;j--)
{
int curpos=8-4*i+j;
if(curpos>=9) continue;
int cur=(tmp/J[j])%10;
if(cur)
{
if(zero)
{
flag++==0? cout<<"ling" : cout<<" ling";
zero=false;
}
if(j==0)
flag++==0? cout<<num[cur] : cout<<" "<<num[cur];
else
flag++==0? cout<<num[cur]<<" "<<c[j] : cout<<" "<<num[cur]<<" "<<c[j];
}
else
if(!zero&&j!=0&&n/J[curpos]>=10) zero=true;
}
if(i!=2&&part[i]!=0) cout<<" "<<c[i+4];
}
}