游客 Signup | Login
中文 | En

2209 - 8

虽然说8在中国很受欢迎,但Miaowu十分不喜欢,因为横过来很像无穷,而他对高数很头疼,所以不想看到这个数字。

现在他想知道在一个区间[l,r]的所有数字中最少有几个8

Input

第一行输入一个数T,表示测试数据个数,对于每组测试数据,输入两个数l,r(0<=l<=r<=2*10^9)

Output

对于每组数据,输出一个答案,表示这个区间内的数中最少有几个8

Examples

Input

3
1 10
88 88
800 899

Output

0
2
1

Hint

对于第一个样例,[1,10]中,有1,2,3,4,5,6,7,9,10是不含8的,8含有18,所以最少含有08.

对于第三个样例,[800,899]中,第一个8是肯定会存在的,而后两位可以都不出现8,所答案为1.

Solution C

#include<stdio.h>
#include<math.h>

int std( int f );

int main()
{
	int a,l,r;
  scanf("%d",&a);
	while(scanf("%d %d",&l,&r)!=EOF)
	{
		int i,j,k=0,n,m;
		n=std( l );
		m=std( r );
		if(m==n)
		{
		 for(i=m-1;i>=0;i--)
		 {
			 if(l/(int)pow(10,i)==r/(int)pow(10,i))
			 {
			 if(l/(int)pow(10,i)==8&&r/(int)pow(10,i)==8)
			 {
				 k++;
				 l=l%(int)pow(10,i);
				 r=r%(int)pow(10,i);
             }
			 l=l%(int)pow(10,i);
			 r=r%(int)pow(10,i);
			 }
		 }
		 printf("%d\n",k);
		}
		else
			printf("0\n");
	}
	return 0;
}


int std( int f )
{
	int i,j,k=0;
	while(f>0)
	{
		f=f/10;
		k++;
	}
	return k;
}

Solution C++

#include<stdio.h>
#include<string.h>
int main()
{
    int T,l,r,i,j,m,x,y,c;
    int a[10000],b[10000];
    scanf("%d",&T);
    while(T--)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
				        x=0;y=0;
		        scanf("%d%d",&l,&r);
		        m=l;
		for(i=0;m!=0;i++)
			{
				a[i]=m%10;
				m=m/10;
				x+=1;
			}
		 m=r;
		 for(j=0;m!=0;j++)
			{
				b[j]=m%10;
				m=m/10;
				y+=1;
			}
		 if(x<y) printf("0\n");
		 else
		 {
			for(i=x,j=y,c=0;i!=0,j!=0;i--,j--)
			{
				if(a[i-1]==b[j-1])
                    if(a[i-1]==8&&b[j-1]==8)
                    {
                        c+=1;
                    }
                    else continue;
				else  break;
			}
			printf("%d\n",c);
		 }
    }
    return 0;
}

Hint

对于第一个样例,[1,10]中,有1,2,3,4,5,6,7,9,10是不含8的,8含有18,所以最少含有08.

对于第三个样例,[800,899]中,第一个8是肯定会存在的,而后两位可以都不出现8,所答案为1.

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题