题目:
难点:
在枚举的过程中,到底该枚举多大的范围。
如何确定枚举上限:
f(n) = 10^n;
g(n) = 9^5 * n
一个n位数字的最大值是10^n -1 // '-1’影响不大
一个n位数字每位最大为9,题目中是一个5位数,一共为n位,所以9^5 * n
可以发现,f,g函数单调递增 n = 5.xxx处为两函数交点,所以n = 6,g(6)为这道题的上限。
#include <stdio.h>
#include <math.h>
int main() {
printf("%d", (int)pow(9, 5) * 6);
return 0;
}
枚举的上界为354294。
解题答案:
#include <stdio.h>
#include <math.h>
#define MAX_N 354294
int is_val(int n) {
int x = n, temp = 0;
while(x) {
temp += (int)pow(x % 10, 5);
x /= 10;
}
return temp == n;
}
int main() {
int sum = 0;
for (int i = 2; i <= MAX_N; i++) {
if (!is_val(i)) continue;
sum += i;
}
printf("%d\n", sum);
return 0;
}