计数问题
TimeLimit: 1 Second MemoryLimit: 32 Megabyte
Totalsubmit: 1712 Accepted: 193
Description
给你两个数a和b,你的任务是计算出1在a和b之间出现的次数,比如说,如果a=1024,b=1032,那么a和b之间的数就是:
1024 1025 1026 1027 1028 1029 1030 1031 1032
则有10个1出现在这些数中。
Input
输入不会超过500行。每一行有两个数a和b,a和b的范围是0 < a, b < 100000000。输入两个0时程序结束,两个0不作为输入样例。
Output
对于每一对输入的a和b,输出一个数,代表1出现的个数。
Sample Input
1 10
44 497
346 542
1199 1748
1496 1403
1004 503
1714 190
1317 854
1976 494
1001 1960
0 0
Sample Output
2
185
40
666
113
105
1133
512
1375
1256
#include<stdio.h>
#define N 11
int value;
int d[N];
void fun(int n)
{
int i,one,ten;
if(n<=0)
return;
one=n%10;
n/=10;
ten=n;
for(i=0;i<=one;i++)
d[i]+=value;
while(ten)
{
d[ten%10]+=(one+1)*value;
ten/=10;
}
for(i=0;i<10;i++)
d[i]+=value*n;
d[0]-=value;
value*=10;
fun(n-1);
}
int main()
{
int i,a,b,tmp;
while(scanf("%d %d",&a,&b)&&a||b)
{
if(a<b)
tmp=a,a=b,b=tmp;
for(i=0;i<10;i++)
d[i]=0;
value=1;
fun(a);
value=-1;
fun(b-1);
printf("%d\n",d[1]);
}
}