也是简单的数位dp。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,dp[][],bit[],ret=;
void get_bit(int x)
{
ret=;
while (x) {bit[++ret]=x%;x/=;}
}
int dfs(int pos,bool flag,bool flag2)
{
if (!pos) return ;
if ((!flag2) && (~dp[pos][flag])) return dp[pos][flag];
int ans=,lim=flag?:-,up=flag2?bit[pos]:;
for (int i=;i<=up;i++)
{
if (i== || i==lim) continue;
ans+=dfs(pos-,(i==),flag2&&i==up);
}
if (!flag2) dp[pos][flag]=ans;
return ans;
}
int ask(int x)
{
get_bit(x);
return dfs(ret,,);
}
int main()
{
memset(dp,-,sizeof(dp));
for (;;)
{
scanf("%d%d",&n,&m);
if ((!n) && (!m)) break;
printf("%d\n",ask(m)-ask(n-));
}
return ;
}