题目链接如下:
我的代码如下:
- #include
-
- int T, N;
- bool flag;
-
- int cal(int k){
- int ans = k;
- while(k){
- ans += k % 10;
- k /= 10;
- }
- return ans;
- }
-
- int main(){
- scanf("%d", &T);
- for(int i = 0; i < T; ++i){
- scanf("%d", &N);
- flag = false;
- for(int j = N - 45; j < N; ++j){
- if(cal(j) == N){
- flag = true;
- printf("%d\n", j);
- break;
- }
- }
- if(!flag){
- printf("0\n");
- }
- }
- return 0;
- }
按照刘汝佳方法写的代码如下:
- #include
- const int maxN = 100005;
-
- int T, N;
- int gen[maxN];
-
- int cal(int k){
- int ans = k;
- while(k){
- ans += k % 10;
- k /= 10;
- }
- return ans;
- }
-
- int main(){
- for(int i = 1; i < maxN; ++i){
- if(cal(i) < maxN && gen[cal(i)] == 0){
- gen[cal(i)] = i;
- }
- }
- scanf("%d", &T);
- for(int i = 0; i < T; ++i){
- scanf("%d", &N);
- printf("%d\n", gen[N]);
- }
- return 0;
- }