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