题目有点绕。。s[x] 范围[1.81]
因为最大的x 为 999999999
然后x 和 每位相加的和 等于s[x] 直接枚举就可以了
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef __int64 ll;
#define MAX 1000000000
int n[1000];
ll Pow(int i,int a){
ll ret = 1;
for(int x = 1;x <= a;x++){
ret *= i;
}
return ret;
}
int main(){
ll a,b,c;
scanf("%I64d%I64d%I64d",&a,&b,&c);
int cnt = 0;
memset(n,0,sizeof(n));
for(int i = 1;i <= 81;i++){
ll x = Pow(i,a);
x = b * x + c;
if(x > 0 && x < MAX){
ll s = x;
int ss= 0;
while(s){
ss += s% 10;
s /= 10;
}
if(ss == i) n[cnt++] = x;
}
}
if(cnt == 0) printf("0\n");
else{
printf("%d\n",cnt);
for(int i =0;i < cnt - 1;i++){
printf("%d ",n[i]);
}
printf("%d\n",n[cnt-1]);
}
return 0;
}