CF779B Weird Rounding


题目传送门

题意:

在数字 $n$ 内删除某些数字,使得可以被 $10^k$ 整除

思路:

既然要使 $n$ 能被 $10^k$ 整除,那么 $n$ 的后 $k$ 个数就一定为 $0$

那么就可以从 $n$ 的末尾往前推,一共找到 $k$ 个 $0$ 时即可停止

分两种情况:

  1. 末尾可以存在 $k$ 个 $0$
  2. 末尾不可以存在 $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;//完结撒花 
}

文章作者: alex_liu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 alex_liu !
  目录