PAT-A-1082 Read Number in Chinese (25 分) 数字转中文读法,字符串处理C++题解
【摘要】
1082 Read Number in Chinese (25 分)
题目传送门:1082 Read Number in Chinese (25 分)
一、题目大意
将数字按照中文读法输出 Samp...
1082 Read Number in Chinese (25 分)
题目传送门:1082 Read Number in Chinese (25 分)
一、题目大意
将数字按照中文读法输出
Sample Input 1:
-123456789
Sample Output 1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
Sample Input 2:
100800
Sample Output 2:
yi Shi Wan ling ba Bai
二、解题思路
将数字转化为字符串,然后按位判断。
注意点:
- 当数字中间隔了零,无论有多少个连续的零,都只读一次“ling”,那么只需要判断零与非零的临界点处读“ling”即可。
- 当前位下标i%4,分别对应单位“Ge”、“Shi”, “Bai”, “Qian”, 不过“Ge”不需要读出来,所以当i%4!=0时,才需要读单位。
- 如果当前位下标i是4,且万位组的值不为0,也就是n%10000000/10000不为零时,才读单位“万”。如100000007,读作“yi Yi ling qi”,中间万位组单位“Wan”不用读。而104000007,要读“yi Yi ling si Bai Wan ling qi”,需要读中间的单位“Wan”。
- 如果当前下标i是8,且亿位组的值不为0,也就是n/100000000不为零才读单位“亿”。同上。
- 由于是反向存放的结果集中的,所有有单位时,要先存单位再存数值。
- 当前数值如果是零,则判断下一位是否为零,如果下一位不是零,则存入“ling”。
- 如果当前位不是零,则直接将当前位存入结果集。
代码中有注释解释。
三、AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<string>v1{"Ge", "Shi", "Bai", "Qian", "Wan", "Yi"};
vector<string>v2{"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
int n;
cin >> n;
if(n == 0){// 特判
cout << "ling" << endl;
return 0;
}
string s = to_string(n);
reverse(s.begin(), s.end());// 转成字符串,低位在前面
int last = 0;
vector<string> res;// 存放结果
for(int i = 0; i < s.size(); i++){
if(s[i] == '-'){
res.push_back("Fu");// 存放
break;
}
if(i == 4 and n % 100000000 / 10000){// 补充单位 万
res.push_back(v1[4]);
}
if(i == 8 and n / 100000000){// 补充单位 亿
res.push_back(v1[5]);
}
if(s[i] == '0'){
if(i and s[i-1] != '0'){
res.push_back(v2[0]);// 在零与非零的交界处出才读零,连续的零只需要读一次
}
}else{
int x = i%4;
if(x!=0){
res.push_back(v1[x]);// 存入单位 千/百/十
}
res.push_back(v2[s[i]-'0']); // 存入数值。本题对十位是1的情况保持读yi Shi,如果十位为1直接读Shi,则此处还要做判断处理
}
}
reverse(res.begin(), res.end());// 反转过来输出结果
for(int i = 0; i < res.size(); i++){
if(i){
cout << " " << res[i];
}else{
cout << res[i];
}
}
cout << endl;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
文章来源: blog.csdn.net,作者:爱玲姐姐,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jal517486222/article/details/100179682
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)