/*************************
题意:
输入最多九位数
用中文的形式去表达。。。
10080是 一万零八百
10100808是 一千零一十万零八百零八
关键就在于何时输出“零”
************************/
/***********************
解题思路:
这题没想到啥能简单的,但因为只有9位数,所以直接暴力解决了,即想到啥特殊情况就加入处理
即先判断亿位(就1个)
再判断亿位之后的四位,这四位决定了是多少万
输出0的话,用1个zeroflag, 加在亿位和非0间,夹在非0和非0间的,都输出零
同理,万位之后的4位类似处理
PS: 不要忽略0, 或者00001这种
*************************/
/***********************
笔记:
*********************/
#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<queue>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<stack>
#include<map>
#include<set>
#include<unordered_map>
using namespace std;
#define M 4
#define INF 0x7ffffff
string snum[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
string qnum[4]={"","Shi","Bai","Qian"};
int main(){
int n, i, j, p, m, k;
string num;
vector<string> ans;
string str;
cin>>num;
if(num[0] == '-'){
str = "Fu";
ans.push_back(str);
num = num.substr(1);
}
reverse(num.begin(), num.end());
num += "000000000";
if(num[8] != '0'){
ans.push_back(snum[num[8]-'0']);
str = "Yi";
ans.push_back(str);
}
int zeroflag = 0;
for(i = 7;i >= 4; i--){
if(zeroflag == 0 && num[i] != '0'){
if(num[8] != '0' && i != 7)
ans.push_back(snum[0]);
ans.push_back(snum[num[i]-'0']);
ans.push_back(qnum[i-4]);
zeroflag = 1;
}
else if(zeroflag == 1 && num[i] == '0'){
zeroflag =2;
}
else if(zeroflag ==2 && num[i] != '0'){
ans.push_back(snum[0]);
ans.push_back(snum[num[i]-'0']);
ans.push_back(qnum[i-4]);
zeroflag = 3;
}else if(num[i] != '0'){
ans.push_back(snum[num[i]-'0']);
ans.push_back(qnum[i-4]);
}
}
str = "Wan";
if(zeroflag != 0)
ans.push_back(str);
int zeroflag2 = 0;
for(i = 3;i >= 0; i--){
if(zeroflag2 == 0 && num[i] != '0'){
if(zeroflag != 0 && i != 3)
ans.push_back(snum[0]);
ans.push_back(snum[num[i]-'0']);
ans.push_back(qnum[i]);
zeroflag2 = 1;
}
else if(zeroflag2 == 1 && num[i] == '0'){
zeroflag2 =2;
}
else if(zeroflag2 ==2 && num[i] != '0'){
ans.push_back(snum[0]);
ans.push_back(snum[num[i]-'0']);
ans.push_back(qnum[i]);
zeroflag2 = 3;
}else if(num[i] != '0'){
ans.push_back(snum[num[i]-'0']);
ans.push_back(qnum[i]);
}
}
if(num[8] == '0' &&zeroflag == 0 && zeroflag2 ==0)
{
cout<<"ling"<<endl;
return 0;
}
for(i = 0;i < ans.size(); i++){
if(ans[i].size()==0)
continue;
if(i == 0)
cout<<ans[i];
else{
cout<<" "<<ans[i];
}
}
cout<<endl;
return 0;
}
PAT 1082. Read Number in Chinese (25) 用中文语法表示数字
最新推荐文章于 2018-09-20 19:46:44 发布