题目有点绕。。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; }