CF1633A Div.7

· · 题解

题目大意

给定一个整数 n,请你修改其一个数位上的值,使其为 7 的倍数且不含前导零。 如果 n 可以被 7 整除,直接输出 n

思路分析

由于 n 位数不大,暴力枚举每一位所有情况即可。总时间复杂度 O(T\log n)

主要芝士

获取 nk 位上的数字:

n / pow(10,k) % 10

本题坑点

如果 n 可以被 7 整除,直接输出 n。修改后的 n 不含前导零,要特判。

代码呈现

#include <bits/stdc++.h>

using namespace std;

int t, n;

int main() {
    cin >> t;
    while (t--) {
        cin >> n;
        if (n % 7 == 0) {
            cout << n << endl;
            continue;
        }
        int base = 1;
        bool flag = false;
        while (base <= n) {
            for (int i = (n / (base * 10) == 0 ? 1 : 0); i <= 9; i++) {
                if ((n - (n / base % 10) * base + i * base) % 7 == 0) {
                    cout << (n - (n / base % 10) * base + i * base) << endl;
                    flag = true;
                    break;
                }
            }
            if (flag) break;
            base *= 10;
        }
    }
    return 0;
}

后记

作为 CF 的新年赛,本题还是挺简单的。