CF1633A Div.7

题目大意

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

思路分析

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

主要芝士

获取 $n$ 第 $k$ 位上的数字:

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 的新年赛,本题还是挺简单的。

posted @   TernaKagiri  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示