首先一點(diǎn),不知道數(shù)字串右邊部分有多少位,所以想到枚舉右邊的位數(shù)。之后這個(gè)2^ans數(shù)的范圍[a,b)就確定了,然后對(duì)a、b取對(duì)數(shù),如果[a,b)中存在一個(gè)最小整數(shù)ans,ans即為所求。
我不太了解C語(yǔ)言的math.h,不知道有沒(méi)有l(wèi)og(a,n)用來(lái)返回以a為底n的對(duì)數(shù),所以自己根據(jù)換底公式寫(xiě)了一個(gè)。
以下是我的代碼:
#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;
}