如果一个数字中只包含4、7和9,他就认为这个数字是他的幸运数。现在给你两个正整数a,b,求出a,b之间的幸运数的个数,包括a,b本身。
第一行为一个整数k(≤100),表示测试数据组数,接下来k行,每行包含两个正整数a,b(1≤a≤b≤10^12)
3
11 20
4 7
1000000 5000000
输入样例
0
2
729
输出样例
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
//freopen("lucky.in","r",stdin);
//freopen("lucky.out","w",stdout);
int t;scanf("%d",&t);
while(t--)
{
ll a,b;int ans=0;scanf("%lld %lld",&a,&b);
for(int i=a;i<=b;i++)
{
bool f=1;
int x=10*i;
while(x/=10)
{
int s=x%10;
if(s==4||s==7||s==9)f=1;
else
{
f=0;break;
}
}
if(f)ans++;
}
cout<<ans<<endl;
}
return 0;
}
我代码
数据规模太大,我这样肯定超时,问题是该怎么优化,求助