ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1082 Read Number in Chinese

2021-08-05 12:31:41  阅读:230  来源: 互联网

标签:1082 Chinese Read res back gg stri ling 数字


1082 Read Number in Chinese

题意描述

给一个不超过9位的数 要求输出 数在传统中文的读法

输入输出格式

输入即为一个不超过9位的十进制整数 可正可负 输出它的中文读法 两个单词之间用空格隔开

数据规模

数最多有9位

算法设计

首先 确定一个方向 我们要处理 ling的添加 数字和中文的对应 以及数字对应的权重的中文

  1. 我们可以先将数字逆序 从个位开始枚举 ,若这位数字不为0,我们将其对应的中文添加至结果向量res
  2. 我们设立两个表 第一个表是数字中文进行转换 ,第二个表是数字的进制单位转换 比如 当枚举到5005时 我们应当添加 wu bai 至结果向量中
  3. ling的处理。 添加ling的原因是 数字在某一位上的取值为 0 比如 千位 百位 比如 1050 读作 yi Qian ling wu Shi 就是因为在百位上 1050 的值为0
  4. 但这里要注意 两个 ling不能重叠 即 这个数可能千位为0,百位也为0,显然只要加一个ling即可。
  5. 这个数 可能万位为0,比如500000 但是 它读作五十万 它有 这个单位的,所以我们可以单独拿出来判断一下,即 如果这个数万位为0,但只要十万位,百万位,千万位 有一个不为0 我们就应该在枚举到这位时添加一个wan
  6. 同时 为了避免出现 ling wan 我们也需要判定 wan的前面没有ling
  7. 最后 注意边界 即数字为0 输出就是ling
  8. 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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有