PAT乙级P1002题解

编程入门 行业动态 更新时间:2024-10-28 13:23:43

PAT乙级P1002<a href=https://www.elefans.com/category/jswz/34/1769599.html style=题解"/>

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题解

本文发布于:2024-02-25 02:44:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1697519.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:题解   乙级   PAT

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!