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()) != '\n'){ 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 }

 通过啦~~

 

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM