谢谢大佬的提点 @苏横_5
#include<iostream>
#include<vector>
#define int long long
using namespace std;
const int N=12;
int f[N];
void init()
{
f[0]=1;
for(int i=1;i<N;i++)
f[i]=f[i-1]*5;
}
int dp(int n)
{
if(!n)return 0;
int res=0;
vector<int>nums;
while(n)
nums.push_back(n%10),n/=10;
int last=nums.size()^1;
for(int i=nums.size()-1;i>=0;i--)
{
int x=nums[i];
for(int j=0;j<x;j++)
{
if((last&1)^(j&1))
res+=f[i];
}
if((x&1)^(last&1))
last=x;
else
break;
if(i==0)
res++;
}
for(int i=nums.size()-1;i>=1;i--)
if((i+1)%2)//这一步需要特判有没有加入过
res+=f[i];
return res;
}
signed main()
{
init();
int a,b;
a=1;
while(cin>>b)
{
cout<<dp(b)-dp(a-1)<<endl;
}
}