计数问题

计数问题

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]);	
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值