题目:
大意:
计算L到R范围内为3-friendly的整数,其中只要满足有连续字符串为3的倍数则为3-friendly数。
把每个数字进行转化。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | 0 |
如果数字存在0,那么即是3-friendly数,当这个数数位超过或等于三位时,无论怎么组合必然会出现会出现3的倍数。所以100及以上的数都为3-friendly数。只要对个位数以及两位数进行特判即可。
代码:
#include<iostream>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
long long num=0;
long long l,r;
cin>>l>>r;
if(r>=100)
{
if(l>=100)//l,r都大于100的情况
num+=(r-l+1);
else//l小于100,r大于100的情况
{
for(int i=l;i<100;i++)
{
if(i%10==3||i%10==6||i%10==9||i%10==0||i/10==3||i/10==6||i/10==9||i%3==0)
num++;
}
num+=r-100+1;
}
}
else{//l,r都小于100的情况
for(int i=l;i<=r;i++)
{
if(i%10==3||i%10==6||i%10==9||i%10==0||i/10==3||i/10==6||i/10==9||i%3==0)
num++;
}
}
cout<<num<<endl;
}
return 0;
}