1.hash
2.惰性处理思想(前导0的处理,遇到一个非零的数才考虑有没有前导0)
#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%100000000)/10000;
part[2] = n%10000;
bool zero = false;//标记是否在非零数前输出前导ling
int flag = 0;//控制输出格式
for(int i=0;i<3;i++){
int temp = part[i];
for(int j=3;j>=0;j--){
int curpos = 8 -4*i + j;
//最高九位0~8
if(curpos>=9) continue;
//取出当前为数
int cur = (temp/J[j])%10;
if(cur!=0){
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];
}
return 0;
}