2209 - 8
时间限制 : 1 秒
内存限制 : 128 MB
虽然说8在中国很受欢迎,但Miaowu十分不喜欢,因为横过来很像无穷,而他对高数很头疼,所以不想看到这个数字。
现在他想知道在一个区间[l,r]的所有数字中最少有几个8?
题目输入
第一行输入一个数T,表示测试数据个数,对于每组测试数据,输入两个数l,r(0<=l<=r<=2*10^9)
题目输出
对于每组数据,输出一个答案,表示这个区间内的数中最少有几个8。
输入/输出样例
输入格式
3 1 10 88 88 800 899
输出格式
0 2 1
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; }
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; }