位数计算: [ 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; }