題目連結:點選打開連結
題目大意:智能讀數。
解題思路:
if 一位數:
else:
if 數位不為0:
if 第一位為1,則shi開頭而不是yi shi開頭的情況。
else。
else:
if 10億 && 第二位為0。
else if 多個連續0 && 不在萬位 && 不在最後兩位。
else if 萬位為0:
if 1億情況,到萬位之前都是0,進入後繼續判斷該位的下一位是否為0(避免與連續0的0重複起來),pb("ling")。
else if 10億情況,到萬位之前都是0,進入後繼續判斷該位的下一位是否為0(避免與連續0的0重複起來),pb("ling")。
#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
#define MOD 1000000007
using namespace std;
typedef long long ll;
vector<string> vs;
int main()
{
string unit[11]={"","","Shi","Bai","Qian","Wan","Shi","Bai","Qian","Yi","Shi"},
num[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
char c;
string s;
cin>>s;
int fu=s[0]=='-'?1:0;
if(fu) s.erase(0,1), printf("Fu ");
int len=s.length();
if(len==1) vs.push_back(num[s[0]-'0']);
else
{
for(int i=0;i<len;i++)
{
c=s[i];
if(c!='0')
{
// if(i==0 && c=='1' && unit[len-i]=="Shi") vs.push_back(unit[len-i]);
// else vs.push_back(num[c-'0']), vs.push_back(unit[len-i]);
vs.push_back(num[c-'0']), vs.push_back(unit[len-i]);
}
else
{
if(len==10 && i==1) vs.push_back("Yi");
else if(i<len-1 && i!=len-5 && s[i+1]!='0')
vs.push_back(num[c-'0']);
else if(len>5 && i==len-5)
{
if(len==9 && s[1]=='0' && s[2]=='0' && s[3]=='0')
{
if(s[5]!='0') vs.push_back(num[c-'0']);
}
else if(len==10 && s[1]=='0' && s[2]=='0' && s[3]=='0' && s[4]=='0')
{
if(s[6]!='0') vs.push_back(num[c-'0']);
}
else vs.push_back("Wan");
}
}
}
}
printf("%s",vs[0].c_str());
for(int i=1;i<vs.size();i++) if(vs[i]!="") printf(" %s",vs[i].c_str());
puts("");
return 0;
}