C++ 写出这个数
题目如下:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 1。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
一开始我还没意识到10的100次方是个什么概念,然后去搜了一下:世界上所有的沙漠的沙子数目约等于10^100
所以用int、double、long类型去接收是不可能的。只能用char类型或者string,这里用string类型(记得include<string>)
1 string nums;
2 cin >> nums;
3 for(int i = 0;i < nums.size();++i)
4 {
5 int num = nums[i] - '0';
6 sum += num;
7 }
这是main函数中接收输入的代码,这时已经能得到输入的数据的各位之和了,我不想在main函数中写过多代码,所以接下来的判断这个sum是几位数的工作就交给另一个函数
在这个函数中要判断这个sum是几位数,再对应的去输出这个数对应的拼音。
1 void fun(int sum)
2 {
3 vector<int> sums;
4 int a,b,c,d,e;
5 if(sum/10000 >= 1)
6 {//超过5位数 包括5位数
7 e = sum/10000;
8 d = (sum-e*10000)/1000;
9 c = (sum-e*10000-d*1000)/100;
10 b = (sum-e*10000-d*1000-c*100)/10;
11 a = (sum-e*10000-d*1000-c*100 -b*10);
12 sums.push_back(e);
13 sums.push_back(d);
14 sums.push_back(c);
15 sums.push_back(b);
16 sums.push_back(a);
17 }else if(sum/1000 >= 1)
18 {//4位数
19 d = sum/1000;
20 c = (sum-d*1000)/100;
21 b = (sum-d*1000-c*100)/10;
22 a = (sum-d*1000-c*100 -b*10);
23 sums.push_back(d);
24 sums.push_back(c);
25 sums.push_back(b);
26 sums.push_back(a);
27 }else if(sum/100 >= 1)
28 {//3位数
29 c = sum/100;
30 b = (sum-c*100)/10;
31 a = (sum-c*100 -b*10);
32 sums.push_back(c);
33 sums.push_back(b);
34 sums.push_back(a);
35 }else if(sum/10 >= 1)
36 {//2位数
37 b = sum/10;
38 a = (sum-b*10);
39 sums.push_back(b);
40 sums.push_back(a);
41 }else
42 {//1位数
43 a = sum;
44 sums.push_back(a);
45 }
46 }
这里重用了我之前的一段代码,这一大串看着非常多,其实一旦确定是几位数后就只执行if中的,所以时间不会很长。(但是代码冗余很多)
判断sum的位数以后,再用一个switch语句来输出即可。
1 for(vector<int>::iterator it = sums.begin();it != sums.end();it++)
2 {
3 switch(*it)
4 {
5 case 1:cout << "yi" ; break;
6 case 2:cout << "er" ; break;
7 case 3:cout << "san" ; break;
8 case 4:cout << "si" ; break;
9 case 5:cout << "wu" ; break;
10 case 6:cout << "liu" ; break;
11 case 7:cout << "qi" ; break;
12 case 8:cout << "ba" ; break;
13 case 9:cout << "jiu" ; break;
14 case 0:cout << "ling" ; break;
15 }
16 if(it != sums.end()-1)
17 {
18 cout << " ";
19 }
最后在main函数中调用这个方法即可。
完整代码如下:
1 #include <iostream>
2 #include <string>
3 #include <vector>
4 using namespace std;
5
6 void fun(int sum)
7 {
8 vector<int> sums;
9 int a,b,c,d,e;
10 if(sum/10000 >= 1)
11 {//超过5位数 包括5位数
12 e = sum/10000;
13 d = (sum-e*10000)/1000;
14 c = (sum-e*10000-d*1000)/100;
15 b = (sum-e*10000-d*1000-c*100)/10;
16 a = (sum-e*10000-d*1000-c*100 -b*10);
17 sums.push_back(e);
18 sums.push_back(d);
19 sums.push_back(c);
20 sums.push_back(b);
21 sums.push_back(a);
22 }else if(sum/1000 >= 1)
23 {//4位数
24 d = sum/1000;
25 c = (sum-d*1000)/100;
26 b = (sum-d*1000-c*100)/10;
27 a = (sum-d*1000-c*100 -b*10);
28 sums.push_back(d);
29 sums.push_back(c);
30 sums.push_back(b);
31 sums.push_back(a);
32 }else if(sum/100 >= 1)
33 {//3位数
34 c = sum/100;
35 b = (sum-c*100)/10;
36 a = (sum-c*100 -b*10);
37 sums.push_back(c);
38 sums.push_back(b);
39 sums.push_back(a);
40 }else if(sum/10 >= 1)
41 {//2位数
42 b = sum/10;
43 a = (sum-b*10);
44 sums.push_back(b);
45 sums.push_back(a);
46 }else
47 {//1位数
48 a = sum;
49 sums.push_back(a);
50 }
51 for(vector<int>::iterator it = sums.begin();it != sums.end();it++)
52 {
53 switch(*it)
54 {
55 case 1:cout << "yi" ; break;
56 case 2:cout << "er" ; break;
57 case 3:cout << "san" ; break;
58 case 4:cout << "si" ; break;
59 case 5:cout << "wu" ; break;
60 case 6:cout << "liu" ; break;
61 case 7:cout << "qi" ; break;
62 case 8:cout << "ba" ; break;
63 case 9:cout << "jiu" ; break;
64 case 0:cout << "ling" ; break;
65 }
66 if(it != sums.end()-1)
67 {
68 cout << " ";
69 }
70 }
71 }
72
73
74 int main()
75 {
76 int sum = 0;
77 string nums;
78 cin >> nums;
79 for(int i = 0;i < nums.size();++i)
80 {
81 int num = nums[i] - '0';
82 sum += num;
83 }
84 fun(sum);
85 return 0;
86 }
C++ 写出这个数的更多相关文章
- PAT乙级 1002. 写出这个数 (20)
1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...
- PAT-乙级-1002. 写出这个数 (20)
1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...
- [C++]PAT乙级1002.写出这个数(20/20)
/* 1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100. ...
- PAT 1002 写出这个数 (20)(代码)
1002 写出这个数 (20)(20 分) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100 ...
- PTA(Basic Level)-1002 写出这个数
一 1002 写出这个数 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1010 ...
- 【PAT】1002. 写出这个数 (20)
1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式 ...
- PAT1002 写出这个数 (C++实现)
PAT乙级考试题目 1002 写出这个数 (20 分) 题目要求: 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 ...
- 【算法笔记】B1002 写出这个数
1002 写出这个数 (20 分)读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 101 ...
- PAT 乙级 1002.写出这个数 C++/Java
1002 写出这个数 (20 分) 题目来源 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n ...
- PAT 乙级练习题1002. 写出这个数 (20)
1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式 ...
随机推荐
- 网关服务spring cloud zuul
Zuul例子配置文件 spring.application.name=switch-gateway server.port=5555 请求路由 传统路由方式 zuul.routes.api-a-url ...
- Docker 18.03 Centos7.6 安装 内网
首先访问https://download.docker.com/linux/centos/7/x86_64/stable/Packages/获取对应版本的rpm包docker包docker-ce-18 ...
- Python学习路线【对标大厂Python工程师的招聘要求,并推荐优质免费资源】打卡学习不迷茫
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文要点:从Python爬虫工程师的招聘要求出发制定学习路线,同时还推荐免费优质的学习资源. 打卡学习不迷茫. 干货满满,建议收藏,需要用到时常看 ...
- 一维前缀和 连续数组和为k
给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数. 滑动窗口没办法解决有负数的情况 方法一: 预处理 前缀和 sum_ij = preSum[j] - preSum[i-1 ...
- webpack 打包样式资源
webpack 打包样式资源 webpack.config.js配置文件内容为: // 用来拼接绝对路径的方法 const {resolve} = require('path') module.exp ...
- Redis这15个“雷坑”,别问我咋知道的……
来源:https://dbaplus.cn/news-158-3836-1.html
- java语言方法中定义final类型的入参有什么用意?
无论参数是基本数据类型,还是引用数据类型,只要加了final,不好意思,该参数不可以再赋值(实参传进来给形参,就相当于初始化完成).可以防止在方法里面不小心重新赋值,造成一些不必要的麻烦!!!参考:h ...
- 如何解决Redis缓存雪崩、缓存穿透
缓存雪崩 数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机. 比如一个雪崩的简单过程: 1.redis集群大面积故障 2.缓存失 ...
- 《Python语言程序设计》【第2周】Python基本图形绘制
实例2:Python蟒蛇绘制 #PythonDraw.py import turtle #import 引入了一个绘图库 turtle 海龟库--最小单位像素 turtle.setup(650, 35 ...
- 14-1-Unsupervised Learning ---dimension reduction
无监督学习(Unsupervised Learning)可以分为两种: 化繁为简 聚类(Clustering) 降维(Dimension Reduction) 无中生有(Generation) 所谓的 ...