求出两数之间0~9的个数
代码:
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
#define sf scanf
#define pf printf
#define INF 1<<29
#define lint __int64
#define clr(x) memset(x,0,sizeof(x))
#define Clr(x) memset(x,-1,sizeof(x))
//数位DP
int b[9]={1,10,100,1000,10000,100000,1000000,10000000,100000000 };
lint count( int n, int id ){
lint left, m, sum = 0;
for(int i = 1; i < 9; i++ ){
left = n / b[i] - (id==0);
sum += left * b[i-1];
m = (n % b[i] - n % b[i-1]) / b[i-1]; //求出从第到高的第i位上的具体数字
if ( m > id ) sum += b[i-1];
else if ( m == id ) sum += n % b[i-1] + 1;
if ( n < b[i] ) break;
}
return sum;
}
int main(){
int x, y;
while ( scanf("%d%d",&x,&y) && (x||y) ) {
if ( x > y ) swap(x,y);
for ( int i = 0; i <= 9; i++ )
printf("%I64d ",count(y,i)-count(x-1,i));
printf("\n");
}
return 0;
}