题目
参考代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 1e4 + 5;
std::list<int> l;
int f(int x) {
int ans = 0;
while (x) {
ans += pow(x % 10, 5);
x /= 10;
}
return ans;
}
int main(void) {
for (int i = 10; i <= 999999; i++) {
if (i == f(i))
l.push_back(i);
}
l.sort();
for(auto x:l)
cout<<x<<endl;
return 0;
}
解题思路
这道题最重要的是确定范围
我们首先想到的是9,99,999,9999…先打印一下,可以得到不同位数能组成的最大五次方数
当我们输出999999的五次方数及对于6位的五次方数后,可以看到五次方数和数本身的差值越来越大了,并且五次方数是较小的那个,也就是说在999999以后,五次方数永远不会大于数本身,那么循环的上界也就是999999
注意事项
0和1在这道题里是不算做五次方数的
至于为什么我也不知道orz