文章目录

  • 题目分析
  • 题目来源

题目分析


来源:acwing

分析

从后往前,四位数作为1组来处理。每组单位最多是十百千,组间单位是万和亿。以123456789为例,分成三组为1,2345,6789,下面while循环便是此作用。

  //4位一组作为1个数,放进numswhile(n) nums.push_back(n % 10000),n/= 10000;

nums数组中存储的是倒序:6789,2345,1。

下面使用三个string 数组进行映射:

num1[]:映射成汉语表示,ling,yi,er,...
num2[]:组内单位:十百千
num3[]:组间单位:万亿

难点在于对零的处理:

  • 末尾ling去掉
  • 不能有连续个ling

这里写了一个函数check用来判断末尾是否是ling

//使用substr库函数,下面是求s字符串最后5个字符s.substr(s.size()-5)=="ling "

用作读者参考:要处理的特例举例:

1,0000,0080
读作: yi Yi ling ba Shi
//中间只有1个零,要考虑清楚

ac代码

#include<bits/stdc++.h>
using namespace std;string num1[] ={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"
};//判断末尾是否是0
bool check(string s) {return s.size() >= 5 && s.substr(s.size()-5)=="ling ";
}//处理4位数
string work(int n){vector<int> nums;while(n) nums.push_back(n%10) ,n/= 10;string num2[]={"","Shi","Bai","Qian"};//组内单位string res;for(int i = nums.size()-1; i>= 0; i--){int t = nums[i];//如果不是0if(t)  res += num1[t]+" ";//转化为中文读法//如果是0,并且res末尾不是lingelse if(!check(res)) res += "ling ";// 不是0并且不是最后一个数(单位是个,不加),加上组内单位if(t && i) res += num2[i]+" ";}//去掉末尾零if (check(res)) res =res.substr(0,res.size()-5);return res;
}int main(){int n;cin >> n;if(!n) cout<<"ling"<<endl;else{if(n<0) cout<<"Fu ",n= -n;vector<int> nums;string res;string num3[] ={"","Wan","Yi"};//4位一组作为1个数,放进numswhile(n) nums.push_back(n % 10000),n/= 10000;//最多nums中3个数//从高位遍历for(int i =nums.size()-1;i>=0; i--){//每次取1组数int t =nums[i];if(res.size() && t<1000 && !check(res)) res += "ling ";if(t) res += work(t);//组间单位if(t && i) res += num3[i] +" ";}//去掉末尾零:末尾可能有多个,所以用whilewhile (check(res)) res =res.substr(0,res.size()-5);res.pop_back(); cout<<res<<endl;}}

题目来源

PAT甲级1082 Read Number in Chinese
https://www.acwing.com/problem/content/1570/

PAT甲级1082 Read Number in Chinese:[C++题解]字符串处理相关推荐

  1. PAT甲级1082 Read Number in Chinese(JAVA版)

    本题考查 字符串处理 思路 除了0之外 数字1-9分别对应其小写拼音,另外当 "数组长度 - 数字所在数组索引" 单位 9 Yi 8.4 Qian 7.3 Bai 6.2 Shi ...

  2. PAT甲级1060 Are They Equal:[C++题解]字符串处理、有效数字、代码简洁!!!

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:字符串处理 题意:把一个数变成0.xxxxx * 10^xxxxx 的形式(小数点后面第一个是大于零的数,除非输入的数本来就是0),位 ...

  3. PAT甲级1017 Queueing at Bank:[C++题解]字符串、结构体、最小堆

    文章目录 题目分析 题目链接 题目分析 客户数据用什么存呢? 好吧,还是用结构体. 结构体里面存什么呢? 到达时间 和服务时间. 窗口怎么存呢? 将窗口的开始服务时间从小到大存,自然想到小根堆. pr ...

  4. PAT甲级1036 Boys vs Girls:[C++题解] 字符串处理

    文章目录 题目分析 题目链接 题目分析 分析可以看下方代码注释. ac代码 #include<bits/stdc++.h> using namespace std;int n; const ...

  5. PAT甲级1005 Spell It Right :[C++题解]字符串处理

    文章目录 题目分析 题目链接 题目分析 ac代码 #include<bits/stdc++.h> using namespace std;const int N =110;string n ...

  6. PAT甲级1001 A+B Format:[C++题解]字符串处理

    文章目录 题目分析 题目链接 题目分析 数字转化成string 的函数to_string() 倒序遍历string,还保证原来的顺序需要 res = num[i] +res. 这里的加号不是数字运算, ...

  7. PAT甲级1024 Palindromic Number:[C++题解]回文串和高精度加法

    文章目录 题目分析 题目链接 题目分析 一个判断是否是回文数的函数:check,思路是使用双指针从两端分别往里走. 另一个是高精度加法函数add,传入两个vector. 另外,vector逆序构造可以 ...

  8. PAT甲级1136 A Delayed Palindrome :[C++题解]回文串和高精度并输出过程

    文章目录 题目分析 题目链接 题目分析 此题和PAT甲级1024 Palindromic Number:[C++题解]回文串和高精度加法 一样.区别是多了输出整个计算过程. 下面是主要知识点. 一个判 ...

  9. PAT甲级1125 Chain the Ropes:[C++题解]贪心、优先队列、合并果子

    文章目录 题目分析 题目来源 题目分析 来源:acwing 板子题:合并果子合并果子优先队列 分析:贪心策略是: 每次取最短的两条绳子a和b.该两条绳子合并为1条绳子,且长度变为a+b2\frac{a ...

最新文章

  1. .NET企业级应用架构设计系列之应用服务器
  2. oracle 修改默认日期格式_查看MySQL查询计划的方法和格式
  3. c语言程序框一点数字就消失,你用C语言编程时,会犯下面的错误吗?
  4. java 软引用_Java中弱引用和软引用的区别以及虚引用和强引用介绍
  5. linux查看r的安装路径,在Linux CentOS 6.5版上安装R3.1.1的问题(检查LDFLAGS以获取Fortran库的路径)...
  6. String.Empty,NULL和的区别
  7. Best Friend Forever
  8. 屏蔽登录QQ后总是弹出的QQ网吧页面
  9. conda安装与入门
  10. Maven配置ojdbc14-10.2.0.4.0.jar
  11. c语言中专业英文词汇的意思,c语言常见专业英语词汇
  12. WIN7安装MTK驱动(系统找不到指定文件!解决方案)
  13. HbuilderX如何创建一个新的Vue工程
  14. SpringSecurity实战(八)-通用第三方登陆-自定义认证配置实现
  15. linux 同步北京时间_设置linux的时间为北京时间
  16. 获取本地视频文件的缩略图
  17. mocha-only和skip的用法
  18. PHP极其强大的图片处理库Grafika详细教程(1):图像基本处理
  19. 开发环境搭建:Python(x,y) + Wing IDE4.0.3以及破解
  20. aptx与ldac音质区别_aptx跟ldac差距大么

热门文章

  1. 简单粗暴地理解js原型链–js面向对象编程
  2. World of Darkraft(codeforces 138D)
  3. mysql性能优化-慢查询分析、优化索引和配置
  4. servlet基础知识
  5. tf.nn.softmax_cross_entropy_with_logits 和 tf.contrib.legacy_seq2seq.sequence_loss_by_example 的联系与区别
  6. 安装linux_linux安装mysql
  7. 文档上传下载 php开源,PHP文件的上传下载 - PHP开发学习门户的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 2.9 情感分类-深度学习第五课《序列模型》-Stanford吴恩达教授
  9. android4.0 编译报错 Xmx2048m错误 .
  10. 计算机课四年级说课稿,小学信息技术说课稿