题目链接:http://codeforces.com/contest/876/problem/C
题意:给定一个数n,求所有的数x,x满足自身加上每一个十进制位上数的和等于n,以及一共有多少个x
思路:n最多10^9,就是说最多9个9,81,也就是说 可能凑成n的数不能比n小81以上,然后枚举下就好了。(ps:当时做的时候还求了个位数,好没必要)
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include<algorithm>
using namespace std;
const int MAXN = 1e5 + 5;
int n, results[MAXN], cnt = 0;
void solve() {
int digits = 0;
int temp = n;
while (temp) {
digits++;
temp /= 10;
}
int l = max(0, n - digits * 9);
for (int i = l; i <= n; i++) {
int t = i;
int sum = i;
while (t) {
sum += (t % 10);
t /= 10;
}
if (sum == n) {
results[cnt++] = i;
}
}
printf("%d\n", cnt);
for (int i = 0; i < cnt; i++) {
printf("%d\n", results[i]);
}
}
int main() {
scanf("%d", &n);
solve();
return 0;
}