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();
}