标签:case 25 PAT 1082 else 万级 length printf ling
-
题目大意:将数字按照中文的方式输出,若数字中有0,则按中国传统方式输出,例如:100800 is yi Shi Wan ling ba Bai
-
思路:
- 找规律!!!
- 先考虑无0的情况:除了个位数,每次读数字都得 先读数字,再读单位
- 再考虑有0的情况:
- case 1 最后一个0在万级以上的位置:只读“ 零”
- case 2 最后一个0在万级以上的位置:
- case 2.1 万级位为0,读”万 零“
- case 2.2 万级位不为0,读” 零“
- 找规律!!!
-
知识点
- hash:用字符串vector存数字和单位的拼音
- stoi():只能将string型变量变成int类型变量(字符、字符数组不行!)
-
代码:
#include <iostream> #include <string> #include <vector> using namespace std; int main(){ string n; vector<string> a = {"yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"}; vector<string> b = {"", "Shi", "Bai", "Qian", "Wan", "Shi", "Bai", "Qian", "Yi"}; // 从低到高。b[0]是个位数 cin >> n; if(stoi(n) == 0) // 一定要考虑n == 0的情况! printf("ling"); if(n[0] == '-') // 有负号的情况 printf("Fu"); for(int i = 0; i < n.length(); i++){ if(n[i] == '-') continue; // 上面输出了负号,所以跳过 if(n[i] == '0') continue; // 是0就跳过 else{ if(i > 0 && n[i - 1] == '0'){ // 分析前面有0的情况:case 1 最后一个0在万级以上的位置; case 2 最后一个0在万级及万级以下的位置 if(n.length() - i + 1 > 5) // case 1 printf(" ling"); else if(n.length() - i + 1 <= 5){ // case 2 if(n[n.length() - 5] == '0') // case 2.1 若万级位置为0 printf(" Wan ling"); else // case 2.2 若万级位置不为0 printf(" ling"); } } if(i != 0) printf(" "); if(i == n.length() - 1) // 个位数没有单位,所以只要输出数值 printf("%s", a[n[i] - '0' - 1].c_str()); else printf("%s %s", a[n[i] - '0' - 1].c_str(), b[n.length() - i - 1].c_str()); // 无0的情况:输出这个数字的数值和单位 } } return 0; }
-
总结:
- 要学会分析问题、找规律!!!
- 不要在一个问题上拖太久,这道题卡了我一天,心态差点崩了…T T
- stoi():只能将string型变量变成int类型变量(字符、字符数组不行!)
标签:case,25,PAT,1082,else,万级,length,printf,ling 来源: https://blog.csdn.net/SSibyl/article/details/116357128
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。