牛客寒假算法基础集训营3 处女座和小姐姐(三)

版权声明:欢迎转载,转载请注明出处,如有错误,还望指出,谢谢 博客地址:https://blog.csdn.net/lanyanzhiji123asd https://blog.csdn.net/lanyanzhiji123asd/article/details/87267749

题目链接 : https://ac.nowcoder.com/acm/contest/329/G

一个比较暴力的方法

先算出0-(r+1) 中不含6的数的个数

算出0-l 中不含6的数的个数

然后用r-l+1-ans

比如 834   我们就先算出 0-799中有多少个数不含6

然后算出800-829

再算出 830-833

这样就行

#include<bits/stdc++.h>
//#define ll long long int
#define ull unsigned long long int
using namespace std;
ull mp[25];

ull get_num(ull n)
{
	int a[30];
	int cnt=1,i,j;
	ull ans=0;
	while(n)
	{
		a[cnt++]=n%10;
		n/=10;
	}
	for(i=cnt-1;i>=1;i--)
	{
		for(j=0;j<a[i];j++)
			if(j!=6)ans+=mp[i];
		if(a[i]==6) return ans;
	}
	return ans;
}

int main()
{
	std::ios::sync_with_stdio(false);
	memset(mp,0,sizeof(mp));
	ull L,R,ans=0;
	int i;
	mp[1]=1;
	for(i=2;i<=20;i++)
		mp[i]=mp[i-1]*9;
	cin>>L>>R;
	ans+=get_num(R+1)-get_num(L);
	cout<<R-L+1-ans<<endl;
	
	
	
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/lanyanzhiji123asd/article/details/87267749
今日推荐