#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
string a[6]={"","Shi","Bai","Qian","Wan","Yi"};
string b[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main(){
string str;
cin>>str;
if(str[0]=='-'){
printf("Fu ");
str.erase(str.begin());
}
int c=str.length();
if(str.length()==9){
cout<<b[str[0]-'0']<<" "<<"Yi";
str.erase(str.begin());
}
if(str.length()>4){
int count=0;
for(int i=0;i<str.length()-4;i++){
bool iszero=false;
while(str[i]=='0'&&i<str.length()-4){i++;iszero=true;count++;}
if(count==4){
printf(" ling");
break;
}
if(iszero){
if(i<str.length()-4){
printf(" ling");
i--;
}
else break;
}
else{
if(i==0){
if(c>=9)cout<<" "<<b[str[i]-'0']<<" "<<a[str.length()-4-i-1];
else if(str.length()>4+i+1) cout<<b[str[i]-'0']<<" "<<a[str.length()-4-i-1];
else cout<<b[str[i]-'0'];
}
else{
if(str.length()>4+i+1)cout<<" "<<b[str[i]-'0']<<" "<<a[str.length()-4-i-1];
else cout<<" "<<b[str[i]-'0'];
}
}
}
if(count!=4)printf(" Wan");
count=0;
for(int i=str.length()-4;i<str.length();i++){
bool iszero=false;
while(str[i]=='0'){i++;iszero=true;count++;}
if(count==4){
break;
}
if(iszero){
if(i!=str.length()){
printf(" ling");
i--;
}
else break;
}
else{
if(str.length()>i+1)cout<<" "<<b[str[i]-'0']<<" "<<a[str.length()-i-1];
else cout<<" "<<b[str[i]-'0'];
}
}
}
else{
if(str=="0"){printf("ling");return 0;}
for(int i=0;i<str.length();i++){
bool iszero=false;
while(str[i]=='0'){i++;iszero=true;}
if(iszero){
if(i!=str.length()){
printf(" ling");
i--;
}
else break;
}
else{
if(i==0)cout<<b[str[i]-'0']<<" "<<a[str.length()-i-1];
else if(str.length()>i+1)cout<<" "<<b[str[i]-'0']<<" "<<a[str.length()-i-1];
else cout<<" "<<b[str[i]-'0'];
}
}
}
return 0;
}
总结:测试点全部AC了,但其实还存在一个错误,冗余比较多,之后再回来修改。