枚举中间点, 每个中间点做一次, 注意前导零的影响
#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL L,R;
LL f[20][20][6000];
int digit[20];
LL dfs(int len,int mid,int sum,int limit,int zero){
if(len==0) return (sum==3000 && !zero) ? 1 : 0;
if(f[len][mid][sum]!=-1 && !limit && !zero) return f[len][mid][sum];
int up = limit ? digit[len] : 9; LL ret = 0;
for(int i=0;i<=up;i++){
ret += dfs(len-1, mid, sum + (len - mid) * i, limit && i==up, zero && i==0);
}
if(!limit && !zero) f[len][mid][sum] = ret;
return ret;
}
LL calc(LL x){
if(!x) return 0;
int len = 0;
while(x){
digit[++len] = x % 10;
x /= 10;
} LL ans = 0;
memset(f,-1,sizeof(f));
for(int i=1;i<=len;i++)
ans += dfs(len,i,3000,1,1);
return ans;
}
int main(){
scanf("%lld%lld",&L,&R);
printf("%lld",calc(R) - calc(L-1));
}