PAT Basic 1002. 写出这个数
1. 题目描述:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
2. 输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于\(10^{100}\)。
3. 输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
4. 输入样例:
1234567890987654321123456789
5. 输出样例:
yi san wu
6. 性能要求:
Code Size Limit
16 KB
Time Limit
400 ms
Memory Limit
64 MB
思路:
首先这里保证输入n小于\(10^{100}\),对于数值类型来说是很大的,所以需要作为字符串读入。
然后就是对读入的字符串逐字符进行处理就好,比较直接的思路。
最后为了输出数字的拼音,定义了一个char指针数组指向各数字拼音的字面量,避免了直接定义二维数组的存储空间浪费。
My Code:
#include <stdio.h>
int main(void)
{
char * pinyin[] = {"ling", "yi", "er", "san",
"si", "wu", "liu", "qi",
"ba", "jiu"};
char n[100]; // 这里好像应该定义101的,但100也accepted了。由n的上限可推得n最多有100位数字,
int sum = 0; // 但注意字符串还要存储末尾的空字符(null character)
char * pchar;
int result[4]; // 这里其实最多3个元素,因为假设n的100位全为9,其各位数字之和的最大值为900
unsigned char count = 0;
scanf("%s", n);
pchar = n;
while(*pchar != '\0') // 这里可以直接写while(*pchar),空字符的ascii码为0
{
sum += *pchar - '0';
pchar++;
}
while(sum) // 这里计算总和的各位数字
{
result[count] = sum % 10;
sum /= 10;
count++;
}
while(count > 1)
{
printf("%s ", pinyin[result[count-1]]);
count--;
}
printf("%s\n", pinyin[result[0]]);
return 0;
}
标签:count,pchar,PAT,数字,sum,char,Basic,100,1002
From: https://www.cnblogs.com/tacticKing/p/17142355.html