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
哦,最后差点忘了,因为评测机可能是多组输入所以记得用getchar()吞回车哦!
算法不易,诸君共勉
以上是关于P1002 写出这个数(Basic Level)的主要内容,如果未能解决你的问题,请参考以下文章
PAT (Basic Level) Practice (中文)1002
(Python) PAT(Basic Level) Practice 刷题笔记