所谓水仙花数(NarcissisticNumber)是指一个3位数,其各位数字的立方和等于它本身。
思路:(1)将该数各位数字分解出来,然后求各数字立方和是否等于原数
(2)凑3个数字,组成一个三位数,求各数字立方和是否等于凑成的数 (注意百位数字从1开始)
例如153是“水仙花数”,因为:153 = 13 + 53 + 33。
分析:“水仙花数”是三位数,所以取值范围是 100〜999。
C语言实现:
#include<stdio.h>
#include<math.h>
int main() {
int unit, ten, hund;
for (int i = 100; i < 1000; i++) {
unit = i / 100; //求百位数
ten = (i / 10) % 10; //求十位数
hund = i % 10; //求个位数
//if (i == hund * hund * hund + ten * ten * ten + unit * unit * unit)
if (i == pow(hund, 3) + pow(ten, 3) + pow(unit, 3))
printf("%d\n", i);
}
}
C++实现:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n, unit, ten, hund;
for (n = 100; n < 1000; n++) {
//将各个数位分离,得到个位、十位、百位。(注意百位数字从1开始)
unit = n % 10;
ten = (n / 10) % 10;
hund = n / 100;
// 判断各位数字的立方和是否等于它本身
//if (n == hund * hund * hund + ten * ten * ten + unit * unit * unit)
if (n == pow(hund, 3) + pow(ten, 3) + pow(unit, 3))
cout << n << endl;
}
cout << endl;
return 0;
}
Java实现:
public class exercise_7 {
public static void main(String[] args) {
int unit, ten, hund;
for (int i = 100; i < 1000; i++) {
unit = i / 100; //求百位数
ten = (i / 10) % 10; //求十位数
hund = i % 10; //求个位数
if (i == hund * hund * hund + ten * ten * ten + unit * unit * unit) {
System.out.println(i);
}
}
}
}
Python实现:
for i in range(100,1000):
sum=0
temp=i
while temp:
sum=sum+(temp%10)**3
temp//=10
if sum == i:
print(i)