题目的主要信息:
- 水仙花数是指一个三位数,其各位数字的立方和等于该数本身
- 请输出所有的水仙花数,一行一个
具体做法:
首先水仙花数只会是三位数,因此我们遍历,即所有的三位数,对每一个三位数检查是否是水仙花数。
检查的时候,我们用对10取余求得个位数字,让其除以10以后再对10取余求得10位数字,最后再除以10以后对10取余求得百位数字。三个数字各自的三次方求和与原数比较,如果相等则是水仙花数,输出该数。
#include <iostream>
using namespace std;
bool isNarcissus(int num){
int temp = num;
int a = num % 10; //个位
num /= 10;
int b = num % 10; //十位
num /= 10;
int c = num % 10; //百位
if(temp == a * a * a + b * b * b + c * c * c) //判断个位、十位、百位数各自三次方后相加是否等于该数
return true;
else
return false;
}
int main() {
for(int i = 100; i < 1000; i++){ //遍历所有的三位数
if(isNarcissus(i)) //如果是水仙花数则输出
cout << i << endl;
}
return 0;
}
复杂度分析:
- 时间复杂度:,循环从到属于常数次,判断是否是水仙花数也是常数级
- 空间复杂度:,常数个变量