水仙花数又称阿姆斯特朗数,指一个n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
给出一个包含端点的范围a到b, 从小到大输出这个范围内的所有水仙花数,用空格隔开。如果范围内没有水仙花数,则输出NO
输入一行两个整数a和b,用空格隔开,表示范围。
100≤a<b≤10^15 b-a≤10^6
输出范围内的所有水仙花数,用空格隔开。如果范围内没有水仙花数,则输出NO
输入样例
100 400
输出样例
153 370 371
代码:
#include <bits/stdc++.h>
using namespace std;
bool flower(long long n){
int a[16] = {0}, x = 0;
long long temp = n, sum = 0;
while(temp){ //数位拆分
a[x] = temp % 10;
temp /= 10;
x++;
}
for(int i = 0; i < x; i++){ //双重循环求a[i]的x次方
long long s_n = 1;
for(int j = 1; j <= x; j++){
s_n *= a[i];
}
sum += s_n;
}
return sum == n; //返回sum==n的bool判断结果
}
int main(){
long long a, b;
bool f = 0;
cin >> a >> b;
for(long long i = a; i <= b; i++){ //魔鬼细节:使用长整型,否则会溢出
if(flower(i)){
cout << i << " ";
f = 1;
}
}
if(f == 0){
cout << "NO";
}
return 0;
}