心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
首先一点,不知道数字串右边部分有多少位,所以想到枚举右边的位数。之后这个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)  编辑 收藏 引用 所属分类: 题目分类:数学/数论

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理