这是正确的
#include <stdio.h>
#include <math.h>
int main()
{
int n,j,i;
double start,reigon;
scanf("%d",&n);
start=pow(10,n-1);
reigon=pow(10,n);
for(i=start;i<reigon;i++)
{
int sum=0,temp=i;
while(sum<=i&&temp!=0)
{
int mod=temp%10;
int k=1;
for(j=1;j<=n;j++)
k=k*mod;
sum=sum+k;
temp /=10;
}
if(sum==i)
printf("%d\n",i);
}
return 0;
}
这是错误的
#include <stdio.h>
#include <math.h>
int main()
{
int n,j,i;
double start,reigon;
scanf("%d",&n);
start=pow(10,n-1);
reigon=pow(10,n);
for(i=start;i<reigon;i++)
{ int sum=0;
int temp=i;
while(sum<=i&&temp!=0)
{
int mod=temp%10;
int k=1;
for(j=1;j<=n;j++)
k*=mod;
sum+=k;
temp/=10;
}
if(sum==i);
printf("%d\n",sum);
}
return 0;
}
我实在找不出这两段代码有什么区别
区别在这里:
正确的: if(sum==i)
printf("%d\n",i);
错误的:
if(sum==i);
printf("%d\n",sum);
从百度百科找了个求水仙花数的代码:
//方法一
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
int cube(const int n){
return n*n*n;
}
bool
isNarcissistic(const int n){//判断是不是水仙花数
int hundreds=n/100;
int tens=n/10-hundreds*10;
int ones=n%10;
return cube(hundreds)+cube(tens)+cube(ones)==n;
}
int main(void){
int i;
for(i=100;i<1000;++i){
if(isNarcissistic(i))
printf("%d\n",i);
}
return 0;
}
参考链接:https://baike.baidu.com/item/%E6%B0%B4%E4%BB%99%E8%8A%B1%E6%95%B0/2746160?fr=aladdin