连续奇数乘积的二进制位
最经碰到这样一个题,我用的方法做了下,可惜算的太慢了,还请各位帮忙,谢谢了,o(∩_∩)o...给定一连续奇数数列,它们的积有几个二进制位?
Input
第一行为一个数n,表示数列的个数。下面每行两个奇数a,b(1<=a<=b<=10,000,000),分别为数列的首项和末项。
Output
对每个数列,输出一行,该行只有一个整数,表示积的二进制位数。
Sample Input
2
1 3
11 13
Sample Output
2
8
这是我写的程序
#include<stdio.h>
#include<math.h>
#define LOG log(2)
int main(){
int n;
int start,end;
int i,result;
int mul;
int preMul;
while(scanf("%d",&n)!=-1){
for(i=0;i<n;i++){
scanf("%d%d",&start,&end);
result=1;
mul=1;
preMul=1;
while(start<=end){
preMul=mul;
mul*=start;
if(mul/start!=preMul){
result+=int(log(float(preMul))/LOG);
preMul=1;
mul=1;
start-=2;
}
start+=2;
}
result+=int(log(float(mul))/LOG);
printf("%d\n",result);
}
}
return 0;
}