水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)
C语言代码
#include <stdio.h>#include <stdlib.h>
void main()
{
int i,j,k,n
printf("'water flower'number is:")
for(n=100n<10000n++)
{
i=n/100/*分解出百位*/
j=n/10%10/*分解出十位*/
k=n%10/*分解出个位*/
if(n==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n)
}
}
printf("\n")
}
3. C++代码
#include<iostream>using namespace std
int f(int x)
{int y=1
for(int i=1i<=3i++)
y=y*x
return y}
int main()
{
for(int i=100i<=999i++)
{if(f(i%10)+f(i/10%10)+f(i/100%10)==i)
cout<<i<<endl}
return 0
}
for循环中,i为循环计数,然而你在循环体中改变了i的值,所以i始终达不到退出循环的条件:i>n, 所以死循环了。
另外:
水仙花数只是自幂数的一种,严格来说三位数的3次幂数才成为水仙花数。
所以要从100到999,如果是4位数,则每位上的数要4次方
#include <stdio.h>#include <math.h>
#define MAX 100
int judge(int a[],int n ,int M)
{
int i , j = 0 , digit
int sum = 0
for (i = 100 i <= n i++)
{
sum=0
int t=i
while(t>0)
{
digit=t%10
sum=digit*digit*digit+sum
t=t/10
}
if(sum==i)
{
a[j++]=i
}
/* while ( i > 0 )
{
digit = i % 10
sum = sum +pow(digit,3)
i = i /10
}
if ( sum == temp)
{
a[j++] = i
}*/
}
printf("\nj=%d\n",j)
return j
}
int main ( void )
{
int n ,i
int m
int a[MAX]
printf("Input the n (100<=n<=10000) : ")
scanf("%d",&n)
if(n<100 || n>10000)
{
printf("\ninput error")
return 1
}
m =judge(a,n,MAX)
for ( i = 0 i < m i++){
printf("%d ",a[i])
}
return 0
}