博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT乙级1002. 写出这个数
阅读量:4620 次
发布时间:2019-06-09

本文共 1506 字,大约阅读时间需要 5 分钟。

1002. 写出这个数 (20)

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10^100。
输出格式:
在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu


解题思路:用字符串数组存储该输入样例,求出字符串数组各位之和,再分离出和中的每位数字,由于分离和输出

为先进后出的顺序,所以采用栈来实现(此处应注意当和为0的情况,以及输出中间才有空格的情况

代码如下:

#include
#include
#include
#include
#include
using namespace std;char a[101];int main(){ int sum = 0; cin >> a; for (int i = 0; i < strlen(a); i++) sum += a[i] - '0'; string s[10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" }; stack
x; do{ x.push(sum % 10); sum = sum / 10; } while (sum != 0); cout << s[x.top()]; x.pop(); while (x.size() != 0) { cout << " " << s[x.top()]; x.pop(); } cout << endl; system("pause"); return 0;}

在网上看到更为简洁的代码:

简洁之处在于:

将输入的数字用string类型存储,求出的和也使用to_string转化成string类型,转换成string类型后方便于访问其每一位数字;

#include 
#include
using namespace std;int main() { string s; cin >> s; int sum = 0; string str[10] = {
"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"}; for (int i = 0; i < s.length(); i++) sum += (s[i] - '0'); string num = to_string(sum); for (int i = 0; i < num.length(); i++) { if (i != 0) cout << " "; cout << str[num[i] - '0']; } return 0;}

 

转载于:https://www.cnblogs.com/denghui666/p/9427072.html

你可能感兴趣的文章
Android -- Fragment
查看>>
前端性能优化和规范
查看>>
python 之进程篇
查看>>
框架编程之路一
查看>>
Verilog学习----运算符、结构说明语句
查看>>
需求分析报告
查看>>
第四次作业
查看>>
Linux下使用pv监控进度
查看>>
Luogu P4901 排队 fib数列+树状数组+倍增
查看>>
PHP 锁机制
查看>>
每天CookBook之Python-036
查看>>
Django 之 cookie & session
查看>>
洛谷P2776 [SDOI2007]小组队列 链表 + 模拟
查看>>
ORA-39006错误原因及解决办法
查看>>
linux常用目录与作用
查看>>
PHP 后台定时循环刷新某个页面 屏蔽apache意外停止
查看>>
codeforces 622B B. The Time
查看>>
个人日报0628
查看>>
BeanDefinition的Resource定位——2
查看>>
学习记事
查看>>