编程 求水仙花数

Python022

编程 求水仙花数,第1张

水仙花数是指一个 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 

}