标签:1082 Chinese Read res back gg stri ling 数字
1082 Read Number in Chinese
题意描述
给一个不超过9位的数 要求输出 数在传统中文的读法
输入输出格式
输入即为一个不超过9位的十进制整数 可正可负 输出它的中文读法 两个单词之间用空格隔开
数据规模
数最多有9位
算法设计
首先 确定一个方向 我们要处理 ling
的添加 数字和中文的对应 以及数字对应的权重的中文
- 我们可以先将数字逆序 从个位开始枚举 ,若这位数字不为0,我们将其对应的中文添加至结果向量
res
中 - 我们设立两个表 第一个表是数字中文进行转换 ,第二个表是数字的进制单位转换 比如 当枚举到
500
的5
时 我们应当添加wu bai
至结果向量中 ling
的处理。 添加ling
的原因是 数字在某一位上的取值为 0 比如 千位 百位 比如 1050 读作 yi Qian ling wu Shi 就是因为在百位上 1050 的值为0- 但这里要注意 两个
ling
不能重叠 即 这个数可能千位为0,百位也为0,显然只要加一个ling
即可。 - 这个数 可能万位为0,比如500000 但是 它读作五十万 它有
万
这个单位的,所以我们可以单独拿出来判断一下,即 如果这个数万位为0,但只要十万位,百万位,千万位 有一个不为0 我们就应该在枚举到这位时添加一个wan
- 同时 为了避免出现
ling wan
我们也需要判定wan
的前面没有ling
- 最后 注意边界 即数字为0 输出就是
ling
- 将
res
逆序 控制格式输出即可
c++代码
#include <bits/stdc++.h>
using namespace std;
using gg = long long;
string biao1[]{"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
string biao2[]{"Ge","Shi","Bai","Qian","Wan","Shi","Bai","Qian","Yi"};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
string stri;
cin>>stri;
if(stri[0] == '-') {
cout<<"Fu ";
stri = stri.substr(1);
}
vector<string>res;
reverse(stri.begin(),stri.end());
gg len = stri.size();
bool flag = false;
for(gg i=0;i<len;i++){
if((i == 5 or i==6 or i== 7) and stri[i] !='0') {
flag = true;
break;
}
}
for(gg i=0;i<len;i++){
if(i == 4 and (stri[i] == '0') and flag) res.push_back("Wan");
if(i ==0 and (stri[i] != '0')) res.push_back(biao1[stri[i]-'0']);
else if(i>0 and (stri[i] =='0') and res.size() and (res.back() != "ling") and (res.back() != "Wan")) res.push_back("ling");
else if(i>0 and (stri[i] != '0')) res.push_back(biao1[stri[i]-'0']+" "+biao2[i]);
}
reverse(res.begin(),res.end());
len = res.size();
for(gg i=0;i<len;i++){
if(i) cout<<" ";
cout<<res[i];
}
if(stri == "0") cout<<"ling"; // '真'数据边界...
return 0;
}
题目链接
标签:1082,Chinese,Read,res,back,gg,stri,ling,数字 来源: https://blog.csdn.net/cxw789/article/details/119415190
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。