排列组合的题目,分位数考虑,累加每一位上为0时有多少种情况。
n的第i位为0=n左边的数(高位)*10^i
n的第i位不为0 =(n左边的数-1)*10^i+(i位右边的数+1)
res=f(n)-f(m-1);
ACcode:
#include<stdio.h>
#define LL long long
LL num0(LL n)
{
LL cnt=0,k=0,j=1,c;
while (n>=10)
{
c=n%10,n=n/10;
if (c) cnt+=1LL*n*j;
else cnt+=(1LL*(n-1)*j)+k+1;
k+=1LL*c*j;
j*=10;
}
return cnt;
}
int main()
{
LL n,m,k;
while ((scanf("%lld %lld",&m,&n)!=EOF)&&m>=0)
{
k=num0(n)-num0(m-1);
if (m==0) k++;
printf("%lld\n",k);
}
return 0;
}