题解 AT1194 【方程式】

这道题目n的范围其实是 1018\large 10^{18}

所以暴力肯定是会 T 飞的。

那我们来想一下:

这里数字和最大是不是18个9是不是162?

那我们直接从 n162\large n - 162 枚举不就完了?

代码:

#include <iostream>
using namespace std;

#define int long long

inline int Digit_sum(const int& x)
{
    int tmp = x, sum = 0;
    while(tmp) {sum += tmp % 10; tmp /= 10;}
    return sum;
}

int ans[1020];

signed main()
{
    int n;
    int cur = 0;
    cin >> n;
    for(register int i = n - 162; i <= n; i++)
    {
        if(i + Digit_sum(i) == n) ans[++cur] = i;
    }
    cout << cur << endl;
    for(register int i = 1; i <= cur; i++) cout << ans[i] << endl;
    return 0;
}
posted @ 2021-01-01 14:16  HappyBobb  阅读(8)  评论(0)    收藏  举报  来源