首先一點,不知道數字串右邊部分有多少位,所以想到枚舉右邊的位數。之后這個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 閱讀(408)
評論(0) 編輯 收藏 引用 所屬分類:
題目分類:數學/數論