像是这种填空题的话,就直接暴力还更加省时间,在本地算完后直接提交答案即可
#include<bits/stdc++.h>
using namespace std;const int N = 10000000;bool isnumber(int n) {vector<int> a;int m = n;while (n > 0) {a.push_back(n % 10);n /= 10;}reverse(a.begin(), a.end()); // 将数字反转,使得 a[0] 是最高位int k = a.size();while (true) {int next = 0;for (int i = a.size() - k; i < a.size(); i++) {next += a[i];}if (next == m) {return true;}if (next > m) {return false;}a.push_back(next);}
}int main() {int MAX = -1;for (int i = 0; i <= N; i++) {if (isnumber(i)) {MAX = i;}}cout << MAX << endl;return 0;
}
对于不确定长度的数组用vector容器,这样可以确保不越界,还有记得多使用一下reverse反转数组,在进制转换中也通过好用,整体的思路是好的,只不过对于数组越界中还是没能够有明确的判断。