LZ 你为什么输入三个数还要分解百位,十位和个位呢??
应该是输入一个数,将它分解成百位,十位和个位,然后才用条件句求这个数是不是水仙花数吧~~!
	
	
	      应该是输入一个数,将它分解成百位,十位和个位,然后才用条件句求这个数是不是水仙花数吧~~!
程序代码:/*******************************************************************************
        题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个n位数,
    其各位数字n次方的和等于该数本身。
    例如:153是一个“水仙花数”,因为153=1^3+5^3+3^3
    534494836也是,因为534494836 = 5^9+3^9+4^9+4^9+9^9+4^9+8^9+3^9+6^9
    输入一个n,找出相应的全部解.
###############################################################################
        作了一个程序,由于long取值范围的问题,理论上可以算到19位数(实际上我在算
    9位数的值的时候,就已经由于时间太长而取消运算了,也许我的算法有问题,期待高人
    指教,谢谢)。
        我想,用数组来运算应该能解决这个问题,无奈才疏学浅,还望高手解决。
*******************************************************************************/
#include<stdio.h>
#define N 19
int dg(long *p,long n,int j)
{
    if(!n)    return j;
    else
    {
        p[j]=n%10;
        j++;
        dg(p,n/10,j);
    }
}
long cubic(long  c,int n)
{
    long i;
    long d;
    d=1;
    for(i=0;i<n;i++)
        d*=c;
    return d;
}
int main(void)
{
    long n,m;
    long p[N];
    long c[N];
    long k=153;
    int i,j;
    printf("input n:\n");
    scanf("%ld",&n);
    while(k<=n)
    {
        j=0,m=0;
        j=dg(p,k,j);
        for(i=0;i<j;i++)
        {
            c[i]=cubic(p[i],j);
            m+=c[i];
        }
        if(m==k)
            printf("%ld\n",k);
        k++;
    }
    getch();
}