题意:
在数字 $n$ 内删除某些数字,使得可以被 $10^k$ 整除
思路:
既然要使 $n$ 能被 $10^k$ 整除,那么 $n$ 的后 $k$ 个数就一定为 $0$
那么就可以从 $n$ 的末尾往前推,一共找到 $k$ 个 $0$ 时即可停止
分两种情况:
- 末尾可以存在 $k$ 个 $0$
- 末尾不可以存在 $k$ 个 $0$,那么直接删到只剩一个 $0$ 即可
既然要每一位分开处理,那么我们就可以用字符串解决
详细的每一步的解析可以看代码注释
AC Code:
#include<bits/stdc++.h>
using namespace std;
string n;//定义字符串
int k,cnt=0,ans=0;//cnt 为 数字串的 0 的个数;ans 是数字串中非零数的个数,即需要删除的数
int main(){
cin>>n>>k;//输入
for(int i=n.size()-1;i>=0;i--){//从后往前枚举
if(cnt>=k)break;//末尾已经有 k 个 0 ,那么可以退出循环
if(n[i]=='0')cnt++;//找到一个 0
else ans++;//不是 0 ,那么就是需要删除的数字
}
if(cnt>=k)cout<<ans<<endl;//末尾可以有 k 个 0,则输出要删除的数
else cout<<n.size()-1<<endl;//否则就删到只剩一个 0
return 0;//完结撒花
}