暑期 每日一练acm题 都来看看说的好给分 只限C
给定两个数a和b,计算出1在a和b之间出现的次数。例如
如果 a = 1024 ,b = 1032
那么 a和b之间的数就是:
1024 1025 1026 1027 1028 1029 1030 1031 1032
则有10个1出现在这些数中。
输入:
输入不超过500行。每行有两个数a和b,a和b的范围是0<a,b<100000000(一亿)。
输入两个0时程序结束,两个零不作为输入样例。
输入:
对于对于每一对输入的a和b,输出一个数,代表1出现的个数。
样例输入:
1 10
44 497
346 542
1199 1748
1496 1403
0 0
样例输出:
2
185
40
666
113
楼主编写:
#include<stdio.h>int main(){ long int a,b,c,i = 0,j,n = 1,m,mun[500]; while( 1 ) { scanf("%d%d",&a,&b); if( a == 0 && b == 0 ) break; if( a > b ) { c = a; a = b; b = c; } j = 0; for( ; a <= b; a++ ) { m = a; while( m != 0 ) { n = m % 10; if( n == 1 ) j++; m = m / 10; } } mun[i] = j; i++; } for( j = 0; j < i ; j++ ) printf("%d\n",mun[j]); return 0;}
sum=0;if(A>1) sum += A*n3 + 1000else if(A==1)sum += A*n3 + BCDif(B>1) sum += B*n2 + 100else if(B==1)sum += B*n2 + CDif(C>1) sum += C*n1 + 10else if(C==1)sum == C*n1 + Dif(D>=1) sum+=1
[解决办法]
分治思想…将a-b先化为1-a跟1-b的问题!然后相剪…
从高位开始判断…位权降低时…次数*10…相加即可…可应用递归…