首先一点,不知道数字串右边部分有多少位,所以想到枚举右边的位数。之后这个2^ans数的范围[a,b)就确定了,然后对a、b取对数,如果[a,b)中存在一个最小整数ans,ans即为所求。
我不太了解C语言的math.h,不知道有没有log(a,n)用来返回以a为底n的对数,所以自己根据换底公式写了一个。
以下是我的代码:
#include<stdio.h>
#include<math.h>
double log(double a,double n)
{
return log10(n)/log10(a);
}
int main()
{
double n,a,b;
while(scanf("%lf",&n)==1)
{
bool find=false;
for(long i=(long)log10(n)+2;!find;i++)
{
a=log(2,n)+i*log(2,10);
b=log(2,n+1)+i*log(2,10);
for(long j=(long)a;j<b&&!find;j++)
if(j>=a&&j<b)
{
printf("%ld\n",j);
find=true;
}
}
}
return 0;
}
posted on 2010-02-28 11:18
lee1r 阅读(400)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:数学/数论