您的位置:首页 > 其它

PAT 1002. 写出这个数 (20)

2018-01-16 16:54 197 查看
题目概述

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。

输出格式:

在一行内输出n的各位数字之和的每一位,拼音数字间有1空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

思路:

先读取自然数n,边读取边计算各位数字的和,只需一个字符和一个整型。

构建一个0-9拼音的字符串数组,不低于100的输出百位,不低于10的输出十位,最后输出个位即可。

一个数组count[100]记录输入的数值

尝试用get获得count的取值

#include<stdio.h>
#include<string.h>

int main() {
//char n;
char count[100];  //记录输入的数值
char num[11]; //转换位数,从低到高
int sum=0;  //记录答案大小
int length = 0;  //记录输入数组的长度
int anslength=0;  //记录答案的长度

char *ans[] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };  //字符数组赋值

/*
先输入数据,之后getchar()的返回值一个接一个赋给c, 然后比较c是不是不等于回车键,
如果不等于回车键就会执行循环。如果等于就会结束。
*/

/*
这种方法也可以,个人感觉更方便,此方法也是转载
作者:OliverLew
链接:https://www.jianshu.com/p/2700af335690
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
while ((n = getchar()) != '\n')
sum += n - '0'; //减去0是为了转成正常的0-9而不是ASCII码

if (sum / 100) //hundreds
printf("%s ", ans[sum / 100]);
if (sum / 10) //tens
printf("%s ", ans[sum / 10 % 10]);
printf("%s", ans[sum % 10]);
*/

/*
下面方法主要是使用了get获得字符串内容
然后通过数组进行存储和转换
注意:
两个常用的小技巧
“/”用于去掉最后一位
“%”用于获得最后一位
*/
gets(count);
length = strlen(count);
for (int i = 0; i < length; i++)
{
sum += count[i] - '0';
}
while (sum != 0) {
num[anslength] = sum % 10;
sum /= 10;
anslength++;
}
if (anslength != 0) {
anslength--;
printf("%s", ans[num[anslength]]);
int temp = --anslength;

98ee
for (int i = temp; i >= 0; i--)
{
printf(" %s", ans[num[i]]);
}
}
else {
printf("%s", ans[anslength]);
}
return 0;
}


这道题刚开始的时候也是没有思路,主要是对于数组和字符串都不怎么熟悉,不知道如何获取字符串的值,这里主要了解了gets个getchar的基本用法,但对于它们的区别并不是特别清楚。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: