1082 Read Number in Chinese
思路
对于每个零,标记一下,然后如果后面出现非0的数字就先$push$零,然后再输出对应的数字,单位。需要注意的是如果万位出现的是$0$,则需要$push$万。
还需要特判一下只有一个零的情况。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
string a;int n;
string b[10]={"","Shi","Bai","Qian","Wan","Shi","Bai","Qian","Yi"};
string num[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
vector<string>ans;
int main(){
cin>>a;if(a=="0") return puts("ling"),0;
if(a[0]=='-') ans.pb("Fu"),a=a.substr(1);bool f=0;
n=a.size();
for(int i=0;i<n;i++){
int x=n-i-1;
if(a[i]=='0'){f=1;
if(x==4) ans.pb(b[x]);
}
else {
if(f) ans.pb(num[0]),f=0;
ans.pb(num[a[i]-'0']);
if(x>0) ans.pb(b[x]);
}
}cout<<ans[0];
for(int i=1;i<ans.size();i++) cout<<" "<<ans[i];
return 0;
}
