做这道题出现了三个问题:
1.由于用的c语言,使用bool类型定义函数,忘记添加#include<stdbool.h>
2.代码flag作为标识符,每一轮测试时,应该在最前方设置为0;(flag==0,则代表无水仙花数)
3.Presentation Error错误,由于多添加 程序结果的“ ”;
最初的代码:
#include<stdio.h>
#include<math.h>
#include<stdbool.h> //bool类型
bool s(int m);
int main(){
int m,n,i;
int flag=0;
int sum;
while(scanf("%d%d",&m,&n)!=EOF){
flag=0; //每次状态标识记得改变
for(i=m;i<=n;i++){
if(s(i)){
flag=1;
printf("%d ",i);
}
}
if(flag==0){
printf("no\n");
}else
printf("\n");
}
return 0;
}
bool s(int m){
int n,a;
n=m;
int sum=0;
while(n/10!=0){
a=n%10;
sum+=pow(a,3);
n=n/10;
}
if(m==sum+pow(n,3)){
return true;
}else return false;
}
更改后的代码:
把水仙花的数加入到一个数组中,输出时,最后一个数据不带有“ ”而带着“\n”.
注;需要注意每次测试时统计变量的更新。
#include<stdio.h>
#include<math.h>
#include<stdbool.h> //bool类型
bool s(int m);
int main(){
int m,n,i,u,j=0;
int flag=0;
int sum;
int num[800];
while(scanf("%d%d",&m,&n)!=EOF){
flag=0; //每次状态标识记得改变
u=0;j=0;
for(i=m;i<=n;i++){
if(s(i)){
flag=1;
num[j++]=i;
// printf("%d ",i);
}
}
if(flag==0){
printf("no\n");
}
else {
if(j>1){
for(u=0;u<j-1;u++){
printf("%d ",num[u]);
}
}
printf("%d\n",num[u]);
}
}
return 0;
}