版权声明:欢迎转载,转载请注明出处,如有错误,还望指出,谢谢 博客地址: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;
}