输出a到b之间有多少个0
#include<iostream>
using namespace std;
__int64 d[11]; //存放0-9出现次数
__int64 value; //记录相应的权值
void deal(__int64 n)
{
if(n<=0)return;
__int64 one, ten;
one=n%10;//个位
n/=10;
ten=n; //去掉个位后剩下的数
for(int i=0;i<=one;i++)
d[i]+=value; //个位先计数一遍
while(ten)
{ // 这个数中每位数字出现的次数
d[ten%10]+=value*(one+1);
ten/=10;
}
for(int i=0;i<10;i++)//0-9每个数都出现了n(ten)*value次
d[i]+=value*n;
d[0]-=value; //去掉第一位是0的情况
value*=10;
deal(n-1); //递归
}
int main()
{
__int64 a,b;
while(cin>>a>>b)
{
if(a==-1&&b==-1)break;
if(a<b){ //大的数放到a中
a=a+b;
b=a-b;
a=a-b;
}
memset(d,0,sizeof(d[0]));
value=1;
deal(a);
value=-1; //value=-1是为了求deal(a)-deal(b)的值
deal(b-1);
b==0?d[0]++:d[0];
cout<<d[0]<<endl;
}
}