题目
首先我们考虑共有两种情况化成99...9:
- 化到11...1,再乘9
- 直接加到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();
}
}