阿姆斯特朗数

Posted 258-333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿姆斯特朗数相关的知识,希望对你有一定的参考价值。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
main()

	int m[10],n, i, t, a, k; 
	for (n = 2; n <= 1000; n++)		 //穷举n的取值范围 *
	
		t = 0;
		a = n;
		k = 0;
		for (i = 0; a != 0; i++)		//从低到高分解数a的每一位存于数组m
		
			m[i] = a % 10;
			a /= 10;
			k++;
		
		for (i = 0; i < k; i++)
		
			t += pow(m[i], 3);
		
		if (t == n)printf("%d ", n);
	

水仙花算法(阿姆斯特朗数)

什么是水仙花数

水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,严格的定义水仙花数,是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。如371 = 3^3 + 7^3+ 1^3,则371是一个水仙花数。

Python中的求解思路

根据水仙花数的定义,可以理出下面的编程思路:

1. 新建一个空列表x,用以存储所有的水仙花数

2. 在For循环中,对100-999之间的任意一个整数i,逐个分解出其个位数a、十位数b和百位数c,比较a、b、c三个数字的3次幂之和是否等于i本身,若等于,则将i添加到列表x中

3. 最后输出的x即为求解的所有水仙花数

注意,在将一个整数i分解出个位数a、十位数b和百位数c时,个位数a是i除以10后得到的余数,百位数c是i除以100后得到的余数,而十位数则是先将i整除10后得到整数部分,再将整数部分除以10后得到的余数数即为十位数,上面代码运行结果如下,得到所有的水仙花数为[153,370,371,407]:

 

代码如下图所示:


# coding=utf-8 x = [] for i in range (100,10000): a = i % 10 #个位数 b = (i / 10) % 10 #十位数 c = i / 100 #百位数 if(a**3 + b**3 + c**3) == i: x.append(i) print(x) #代码优化 y = i for i in range(100,10000) if ((i%10)**3 + ((i/10)%10)**3+(i/100)**3) == i print(y)

  技术图片

 

以上是关于阿姆斯特朗数的主要内容,如果未能解决你的问题,请参考以下文章

python实现三位的水仙花数(阿姆斯特朗数)

锦囊10-阿姆斯特朗数

Python实现阿姆斯特朗数

阿姆斯特朗数

079.阿姆斯特朗数

在一个前端群里看到的一个练习,获取阿姆斯特朗数