在动手写代码之前,我们得先搞明白什么是水仙花数:
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant,PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。(百度百科)
由此我们知道,只有三位数才有可能是水仙花数,因此我们需要使用一个for循环来产生100-999之间的数字。
其次一个重要问题就是如何把一个三位数的每个位的数字单独分出来以供我们进行立方运算。
对于一个三位数n,它的个位和百位很好分离出来:
对于个位:n%10
对于百位:n/100
但是十位怎么分离呢?我们可以举个例子,就用153来举例吧:要得到153的十位数字5,我们可以先得到53,再用53/10来得到十位数字5。如何得到53呢?其实也很简单,只需要用153-100*153/100,于是可以想到得到n的十位数字的公式:
对于十位:n-100*n/100
有了分离的三位上的数字,只需要进行立方运算求和即可,这里可以考虑使用pow()函数。pow(a,b)表示计算a的b次方。但需要注意的是,使用这个函数需要引入头文件#include
代码如下:
int main() { int n = 0; int ge = 0; int shi = 0; int bai = 0; for (n = 100; n < 1000; n++) { ge = n % 10; shi = (n - 100 * (n / 100)) / 10; bai = n / 100; if (n == pow(ge, 3) + pow(shi, 3) + pow(bai, 3)) { printf("%d ", n); } } return 0; }
运行效果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)