题面:https://codeforces.com/problemset/problem/876/C
思路:这是一道典型的cf题。n最大时1e9,当每一位数都为9时,各数位上的数之和最大为81,所以只需要从n-81到n循环一遍有多少符合条件的,并将其用一个数组保存。
代码:
#include <bits/stdc++.h>
using namespace std;
int n, a[100010];
int main(){
scanf("%d", &n);
int cnt = 0;
for(int i = n - 500; i <= n; i++){
if(i < 0) continue;
else{
int temp = i;
int sum = temp;
while(temp != 0){
sum += temp % 10;
temp /= 10;
}
if(sum == n){
cnt++;
a[cnt] = i;
}
}
}
printf("%d\n", cnt);
for(int i = 1; i <= cnt; i++) printf("%d ", a[i]);
return 0;
}