C++ 写出这个数
2021-02-16 21:19
标签:board pac ack int lang push 另一个 pre ace 题目如下: 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 1。 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。 这是main函数中接收输入的代码,这时已经能得到输入的数据的各位之和了,我不想在main函数中写过多代码,所以接下来的判断这个sum是几位数的工作就交给另一个函数 在这个函数中要判断这个sum是几位数,再对应的去输出这个数对应的拼音。 这里重用了我之前的一段代码,这一大串看着非常多,其实一旦确定是几位数后就只执行if中的,所以时间不会很长。(但是代码冗余很多) 判断sum的位数以后,再用一个switch语句来输出即可。 最后在main函数中调用这个方法即可。 完整代码如下: C++ 写出这个数 标签:board pac ack int lang push 另一个 pre ace 原文地址:https://www.cnblogs.com/apprendre-10-28/p/12702214.html输入格式:
输出格式:
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
一开始我还没意识到10的100次方是个什么概念,然后去搜了一下:世界上所有的沙漠的沙子数目约等于10^100
所以用int、double、long类型去接收是不可能的。只能用char类型或者string,这里用string类型(记得include1 string nums;
2 cin >> nums;
3 for(int i = 0;i i)
4 {
5 int num = nums[i] - ‘0‘;
6 sum += num;
7 }
1 void fun(int sum)
2 {
3 vectorint> 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 }
1 for(vectorint>::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 }
1 #include