一个数如75, 则规定d(75)=75+5+7=87。有一种数叫self-number,就是无论n为何值,都无法用d(n)表示 例如1 3 5 7 9 20 31 42 53 64…………9903 9914 9925 9927 9938 9949 9960………………………………要输出1——1000000内所有的此类数
作第二次循环感觉是一种的算法,恳求更好的方法 /*差不多了,但有一个问题 当m=1000000时,数组太大了,无法编译 重新定义了sum[1000][1000]; 仍报The array is too large 帮忙看一下,有没有解决方法 */
#include "Stdio.h" #include "Conio.h"
int main(void) {
int i, m,n,j=0; int a[5]; int sum[10000]={0};/*用于存放非self-number*/ printf("\n"); for(m=1;m<=10000;m++) { i=m; for(n=0;n<=4;n++) { a[n]=i%10; i=i/10; sum[m]=sum[m]+a[n]; }
sum[m]=sum[m]+m;
}
/*又作第二次循环,感觉很不好。*/ for(m=0;m<=10000;m++)
{ for(n=1;n<=10000;n++) if(m==sum[n]) j=j+1; /*用j判别是否为self-num*/ if(!j) printf("%d ",m); j=0; } getch(); return 0; }