…
#include<iostream>
#include<cstring>
using namespace std;
#define ll long long
const int maxn=25;
ll pos[maxn];
ll dp[maxn][maxn][maxn*100];
ll i;
ll dfs(int ps,int pt,int st,int fn)//数的位数 支点的位置 力矩和
{
if(!ps)
return st==0;
if(st<0)return 0;
if(!fn&&~dp[ps][pt][st])
return dp[ps][pt][st];
int maxx=fn?pos[ps]:9;
ll sum=0;
for(int i=0; i<=maxx; i++)
{
sum+=dfs(ps-1,pt,st+(ps-pt)*i,fn&&i==maxx);
}
if(!fn)
dp[ps][pt][st]=sum;
return sum;
}
ll getD(ll x)
{
pos[0]=0;
while(x)
{
pos[++pos[0]]=x%10;
x/=10;
}
ll rt=0;
for( i=1; i<=pos[0]; i++)
rt+=dfs(pos[0],i,0,1);
return rt-pos[0]+1;
}
int main()
{
ll m,n;
cin >> m>>n;
memset(dp,-1,sizeof(dp));//赋值-1 判断要比 赋值为0快
cout << getD(n) -getD(m-1)<< endl;
return 0;
}