~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

位数计算: [ N*lg2 ] +1
log10(2)=0.301029996

/*2的10万次方,控制台光标跳动约16次*/
#include <iostream>
#include <cmath>
using namespace std;
void f(int n)
{
    int b,x,f,j,k,flag,v;
    b=(int)(n*log10(2.0)+1);/*位数*/
    char *a=(char *)malloc(b*sizeof(char));
    for(v=0;v<b;v++)a[v]=0;
    a[0]=1;    
    for(k=1,flag=0;k<=n;k++)/*监视哨初始指向数组首位*/
    {
        for(f=0,j=0;j<=flag || f>0;j++)/*j未到监视哨,或者有进位*/
        {
            x=a[j]*2+f;
            f=x/10;/*进位*/
            a[j]=x%10;
        }
        if(a[j]==0 || j==b)
        flag=--j;
        else
        flag=j;
    }
    while(flag>=0) /*输出结果*/
    {        
       printf("%d",a[flag]);
    flag--;
    }    
}
int main()
{
    int n;
    cout<<"输入2的n次方(10万次光标跳动约16次):";
    cin>>n;
    f(n);
    return 0;
}

 

posted on 2016-03-20 10:52  LuoTian  阅读(547)  评论(0编辑  收藏  举报