题解"/>
PAT乙级P1002题解
- 题目
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
- 个人理解
好久不做题脑子锈了,这题一眼看过去感觉简简单单switch语句搞定,细看发现Input范围吓人,开始想用double储存然后fmod函数处理最后对sum做一个int类型的强转,但不知道为什么结果总是差2,考虑到GCC编译器的强转判定经常出现匪夷所思的错误没有深究(有懂的大佬还请指教qwq),改用字符串读取,操作简单很多。后面逆序输出没有想到太好的办法,用了一个很蠢的递归,想过先循环判断sum的长度然后倒序遍历,感觉也不太好,希望有佬指点qwq
另外这个代码没有AC,测试点1出现类型错误,调了半天也不懂哪错了。。。希望大佬指点🤣
代码如下
#include <stdio.h>#include <string.h>char number[10][10] = {{"ling"},{"yi"},{"er"},{"san"},{"si"},{"wu"},{"liu"},{"qi"},{"ba"},{"jiu"}
};
void myprint(int n, int mark){if(n < 10){if(n == mark){printf("%s\n", number[n]);}else{printf("%s ", number[n]);}}else{myprint(n/10, mark);if((n % 10) == mark){printf("%s\n", number[n % 10]);}else{printf("%s ", number[n % 10]);}}
}
int main(void){char n[102];scanf("%s", n);int sum = 0;for(int i = 0; i < strlen(n); i++){sum += n[i] - '1' + 1;}int mark = sum % 10;myprint(sum, mark);return 0;
}
- 补充:
看了其他人的题解改正了,空格完全没必要单独用一个mark判断,只需要把第一个拎出来"%s"剩下" %s"就行了,长见识了!这个方法刷PAT的很多题感觉都能用到(PAT是真的不想让你输出末尾多余的空格🤣
下面是AC代码
#include <stdio.h>#include <string.h>char number[10][10] = {{"ling"},{"yi"},{"er"},{"san"},{"si"},{"wu"},{"liu"},{"qi"},{"ba"},{"jiu"}
};
void myprint(int n){if(n < 10){printf("%s", number[n]);}else{myprint(n/10);printf(" %s", number[n % 10]);}
}
int main(void){char n[102];scanf("%s", n);int sum = 0;for(int i = 0; i < strlen(n); i++){sum += n[i] - '1' + 1;}myprint(sum);return 0;
}
更多推荐
PAT乙级P1002题解
发布评论