#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; }看你写的很麻烦,不如用自定义函数。很简单,代码也很清晰。

慕移动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");
}
- 2 回答
- 0 关注
- 1555 浏览
添加回答
举报
0/150
提交
取消