P1002 写出这个数(Basic Level)

Posted daker-code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1002 写出这个数(Basic Level)相关的知识,希望对你有一定的参考价值。

  作为第二题,拿字符串刚刚好。不过这道题我卡了一下,还是太弱了。看题技术图片

  题目意思很明确,就是想让你把输入的每一位数字加起来,再输出各个位的拼音。这道题一看int型就存不下longlong也别想 10100 就别想那么多了,肯定是字符数组。唉不过丢连丢到家了我去算了一下 10100 是多少后直接断言说数组装不下。当时脑子一抽就觉得 10100 就该有 10100 位,丢脸啊。这玩意数组最大开个110就行了,真的是瞎了。这道题第一个难点讲完了,至于求和,很简单,让str[i]-‘0‘即可得到整数,外面套个循环就求出来了。另外一个难点就是求每一位的循环的停止条件应该是

if (0 != sum / 10 || 0 != sum % 10) //缺一不可

  || 后面是用来预防相加之后只有一位数, 前面是用来预防sum是10 的倍数。最后说说输出,反正我是switch case,也可以用 if……else……,随意。目前我是想不到更好的办法了。

最后当然是愉快的贴上 AC 代码啦

技术图片
 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int main()
 5 
 6     char str[110];
 7     while (~scanf("%s", str))
 8     
 9         int sum = 0;
10         for (int i = 0; str[i] != \\0; i++)
11         
12             sum += str[i] - 0;
13         
14         int i = 0;
15         while (0 != sum % 10 || 0 != sum / 10)
16         
17             str[i] = sum % 10 + 0;
18             i++;
19             sum /= 10;
20         
21         str[i] = \\0;
22         int len = strlen(str);
23         for (i = len - 1; i >= 0; i--)
24         
25             switch (str[i] - 0)
26             
27             case 0:
28                 printf("ling");
29                 break;
30             case 1:
31                 printf("yi");
32                 break;
33             case 2:
34                 printf("er");
35                 break;
36             case 3:
37                 printf("san");
38                 break;
39             case 4:
40                 printf("si");
41                 break;
42             case 5:
43                 printf("wu");
44                 break;
45             case 6:
46                 printf("liu");
47                 break;
48             case 7:
49                 printf("qi");
50                 break;
51             case 8:
52                 printf("ba");
53                 break;
54             case 9:
55                 printf("jiu");
56                 break;
57             
58             if (i != 0)
59             
60                 printf(" ");
61             
62         
63         putchar(\\n);
64         getchar();
65     
66     return 0;
67 
View Code

  哦,最后差点忘了,因为评测机可能是多组输入所以记得用getchar()吞回车哦!

算法不易,诸君共勉

以上是关于P1002 写出这个数(Basic Level)的主要内容,如果未能解决你的问题,请参考以下文章

PTA(Basic Level) 1002

PTA(Basic Level) 1002

PAT (Basic Level) Practice (中文)1002

(Python) PAT(Basic Level) Practice 刷题笔记

(Python) PAT(Basic Level) Practice 刷题笔记(1-33)

[PAT Basic] 1002.写出这个数