PTA甲级问题 写出这个数 第二个测试点无法通过

Posted littlealice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA甲级问题 写出这个数 第二个测试点无法通过相关的知识,希望对你有一定的参考价值。

如题,PTA甲级问题 写出这个数 第二个测试点无法通过,没有报错信息

提交结果如下:

技术分享图片

题目 1002 写出这个数 (20)(20 分)
作者: CHEN, Yue
单位: PAT联盟
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB

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

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

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

我的代码如下:
 1 #include<stdio.h>
 2 #include<string.h>
 3 /*输入n<10^100,则nmax=999…^9,100个9。则输出s<=9*100=900*/
 4 
 5 const char *ntoc[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
 6 
 7 int main(){
 8     char inputString[100];
 9     int s,i;
10     s=i=0;
11     
12     if(scanf("%s",inputString)==1){
13         for(int i=0;i<strlen(inputString);i++){    
14             s+=(int)inputString[i]-48;
15         }
16         //printf("%d:",s);
17         //接下来对结果进行拼音转换
18         //结果肯定是1至3位
19         if(s/100!=0){//百位数不为零,s是三位数,输出百位
20             printf("%s",ntoc[s/100]);
21             s=s%100;
22         }
23         //十位数不为零
24         if(s/10!=0){
25             printf("%s",ntoc[s/10]);
26             s=s%10;
27         }
28         //个位数
29         printf("%s",ntoc[s/1]);//ntoc(n/1);
30     }
31     return 0;
32 }
请问各位前辈,代码哪里出问题了呢
hhhh  知道了,是 三位数结果X0X,丢失十位
18         //结果肯定是1至3位
19         if(s/100!=0){//百位数不为零,s是三位数,输出百位
20             printf("%s",ntoc[s/100]);
21             s=s%100;
22         }
23         //十位数不为零
24         if(s/10!=0){
25             printf("%s",ntoc[s/10]);
26             s=s%10;
27         }
整体修改如下
 1 #include<stdio.h>
 2 #include<string.h>
 3 //输入 n<10^100,则 n 最多有99位,则输出 s <= 9*99 = 891
 4 
 5 const char *ntoc[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
 6 
 7 int main(){
 8   char c;
 9   int s=0;
10     
11 
12   while((c = getchar()) != 
){
13     s += c - 0;
14   }
15   //printf("%d:",s);
16   //接下来对结果进行拼音转换
17   //结果肯定是1至3位
18   if(s/100!=0){//百位数不为零,s 是三位数,输出百位和十位
19         printf("%s ",ntoc[s/100]);
20         s=s%100;
21         printf("%s ",ntoc[s/10]);
22         s=s%10;
23   }
24   else if(s/10!=0){//百位数为零,十位数不为零,s 是两位数,输出十位
25      printf("%s ",ntoc[s/10]);
26      s=s%10;
27   }
28     //输出个位数
29   printf("%s",ntoc[s/1]);//ntoc(n/1);
30   return 0;
31 }

 通过啦~~

 技术分享图片

 总结,有某个测试点过不去,肯定是代码某个细节有问题,要仔细查逻辑哦~




以上是关于PTA甲级问题 写出这个数 第二个测试点无法通过的主要内容,如果未能解决你的问题,请参考以下文章

pta甲级1010

[PTA] 1002. 写出这个数 (Basic)

PAT甲级1010踩坑记录(二分查找)——10测试点未过待更新

PTA 乙级 1002 写出这个数 (20分)

PTA——7-2 然后是几点 (15分)

PTA(Basic Level) 1002