2025/12/12 牛客月赛 D E题解

7 阅读1分钟

题目

D-⑨运算(Easy Version)_牛客小白月赛125

E-⑨运算(Hard Version)_牛客小白月赛125

首先我们考虑共有两种情况化成99...9:

  1. 化到11...1,再乘9
  2. 直接加到99...9

取min值。

第一种情况,设要加n个9化到11...1,再乘9,相当于加了9n个9,也就相当于99...9与原数的差为9n个9。因此,我们可以先求出要加几个9,因为只有一次乘9的机会,所以9要尽可能放在最后一次。即,假设要加m个9,先加m/9个9,再乘9,最后加上m%9个9。

第二种情况,从原数加9加到99...9,所以原数一定是9的倍数,直接求差/9即可。

AC代码如下

#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
    int x;
    cin>>x;
    int m11=1;
    while(m11<x){
        m11=m11*10+1;//大于原数的11...1
    }
    int d=m11-x;
    int ans=d/9+d%9+1;
    if(x%9==0){
        int m9=0;
        while(m9<x){
            m9=m9*10+9;//大于原数的99...9(位数与原数相同)
        }
        ans=min(ans,(m9-x)/9);
    }
    cout<<ans<<endl;
}
signed main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        solve();
    }
}