为了账号安全,请及时绑定邮箱和手机立即绑定

求1-10000的水仙花数,不知哪里出错了,只输出1?

求1-10000的水仙花数,不知哪里出错了,只输出1?

C
慕桂英4798417 2017-11-01 21:17:42
#include<stdio.h>#include<math.h>void main(){int i,m,n,sum,s;int power(int x,int y);n=0;i=150;for(i=1;i<=10000;i++){ int sum=0; do{n++;}while(i/power(10,n)!=0);  for(m=1;m<=n;m++){   s=i%power(10,m)/power(10,m-1);   sum=sum+power(s,3);}  if(sum==i)printf("%d",sum);}          } int power(int x,int y){int i,pow=1;for(i=1;i<=y;i++){pow=pow*x;}return pow;}
查看完整描述

2 回答

?
达布尔Double

TA贡献3条经验 获得超1个赞

#include <stdio.h>
int fun(int n){
    int i,s=0;
    for(i=1;i<n;i++)
        if(n%i==0)
            s+=i;
    return s;
}
int main(){
    int i;
    for(i=1;i<=10000;i++)
        if(fun(i)==i)
            printf("%d是水仙花数\n", i);
    return 0;
}
看你写的很麻烦,不如用自定义函数。很简单,代码也很清晰。
查看完整回答
反对 回复 2017-11-05
?
慕移动6052691

TA贡献22条经验 获得超7个赞

#include <stdio.h>

#include <stdlib.h>

#include <math.h>


bool isFlowerNum(int n,int bit)

{

int sum =0;

int tmp =n;

while(tmp!=0 )

{

//取出每位数字

int remainder = tmp%10;

sum+=(int)pow((double)remainder,bit);

tmp= tmp/10;

}


if(sum == n)

return true;


return false;

}

 

void main()

 

{

int bit =0;

 

for(int n =1;n<=10000;n++)

{

if(n<10)

bit = 1;

else if(n<100)

bit =2;

else if(n<1000)

bit =3;

else

bit =4;


if(isFlowerNum(n,bit))

printf("是水仙花数:%d\n",n);

}

 system("pause");

 

}


查看完整回答
反对 回复 2017-11-02
  • 2 回答
  • 0 关注
  • 1555 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信