uva 11038

来源:互联网 发布:钢琴选购知乎 编辑:程序博客网 时间:2024/06/09 18:05

排列组合的题目,分位数考虑,累加每一位上为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 longLL 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;   }


 

原创粉丝点击