pta 上写题目 我写的版本和 网上找的答案,找不出哪里出了问题,我的版本通不过
我写的版本
int narcissistic( int number ){
int a,b,c;
a=number/100%10;
b=number/10%10;
c=number%10;
if (number/1000 == 0){
if(a*a*a+b*b*b+c*c*c == number){
return 1;
} else {
return 0;
}
} else {
int d=number/1000%10;
if(a*a*a+b*b*b+c*c*c+d*d*d == number){
return 1;
} else {
return 0;
}
}
}
void PrintN( int m, int n ){
for(int i=m+1;i<n;i++){
if(narcissistic(i) == 1){
printf("%d\n",i);
}
}
}
网上找的答案
在这里插入代码片
```int narcissistic( int number ){
int i,j,k,r;
i=number%10;
j=number/10%10;
k=number/100%10;
if(number/1000==0) //判断number是三位数
return number==i*i*i+j*j*j+k*k*k;
else{
r=number/1000%10; //判断number是四位数
return number==i*i*i*i+j*j*j*j+k*k*k*k+r*r*r*r; //若相等则返回 1,否则返回 0;
}
}
void PrintN(int m,int n){
int i,t;
if(m>n){ //m>n时此时要互换一下
t=m;
m=n;
n=t;
}
for(i=m+1;i<n;i++){
if(narcissistic(i)) printf("%d\n",i);
}
}
我的版本:
输入: 153 153
输出:
153 is a narcissistic number
153 is a narcissistic number
看了一下感觉好像和答案没什么区别,请各位指点一下,谢谢!
少了这个判断啊
if(m>n){ //m>n时此时要互换一下
t=m;
m=n;
n=t;
}
我看到两个地方不同,
一是 PritnN 函数网上那份将参数m和n处理了一下,确保m小于n;
二是narcissistic函数 else部分,网上那个是讲每个数位的值的4次方之和与原数相比,你的是每个数位的值的三次方之和与原数相比。