词条 | 阿姆斯特朗数 |
释义 | 阿姆斯特朗数如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5^3 + 3^3 = 153 当n=3时,又称水仙花数,特指一种三位数,其各个数之立方和等于该数。 水仙花数共有4个,分别为:153、370、371、407。 100000000以内的阿姆斯特朗数100000000以内的阿姆斯特朗数153 370 371 407 1634 8208 9474 54748 92727 93084 548834 1741725 4210818 9800817 9926315 24678050 24678051 88593477 C语言实例如果一个正整数等于其各个数字的n次方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。 如 407=64+0+343就是一个阿姆斯特朗数。试编程求1000以内的所有阿姆斯特朗数。 *问题分析与算法设计 可采用穷举法,依次取1000以内的各数(设为i),将i的各位数字分解后,据阿姆斯特朗数的性质进行计算和判断。 *程序说明与注释 #include<stdio.h> int main() { int i,t,k,a[3]; printf("There are follwing armstrong number smaller than 1000:\"); for(i=2;i<1000;i++) /*穷举要判定的数i的取值范围2~1000*/ { for(t=0,k=1000;k>=10;t++) /*截取整数i的各位(从高向低位)*/ { a[t]=(i%k)/(k/10); /*分别赋于a[0]~a[2}*/ k/=10; if(a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2]==i) /*判断i是否为阿姆斯特朗数*/ printf("%5d",i); /*若满足条件,则输出*/ } printf("\"); } *运行结果 There are following armstrong number smaller than 1000: 153 370 371 407 C++实例本程序为1000000000以内的阿姆斯特朗数 #include<iostream> using namespace std; int main() { freopen("sss.txt","w",stdout); long long i,j,x[12],temp,h; int b,c,a[10] [9]= { 0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1, 2,4,8,16,32,64,128,256,512, 3,9,27,81,243,729,2187,6561,9683, 4,16,64,256,1024,4096,16384,65536,262144, 5,25,125,625,3125,15625,78125,390625,1953125, 6,36,216,1296,7776,46656,279936,1679616,10077696, 7,49,343,2401,16807,117649,823543,5764801,40353607, 8,64,512,4096,32768,262144,2097152,16777216,134217728, 9,81,729,6561,59049,531441,4782969,43046721,387420489}; for(i=100;i<=999999999;i++) { int k=0; memset(x,0,sizeof(x)); x[1]=i; for(j=1;j<12;j++) { if(x[j]>=10) { temp=x[j]/10; x[j]-=temp*10; x[j+1]=temp ; k++; } else break; } if(a[x[1]][k]+a[x[2]][k]+a[x[3]][k]+a[x[4]][k]+a[x[5]][k]+a[x[6]][k]+a[x[7]][k]+a[x[8]][k]+a[x[9]][k]+a[x[10]][k]==i) cout<<i<<" "; } } 结果为: 153 370 371 407 1634 8208 9474 54748 92727 93084 548834 1741725 4210818 9800817 9926315 24678050 24678051 88593477 146511208 此程序的运行时间为210.109秒。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。