刚刚百度了一下,因为C语言无法定义超大数字,可以用字符串来模拟,这样的话我们可以定义一个整形数组,有若干元素。循环1000次,把计算出的结果保存到数组中,给每个数组元素一个范围,超过范围时就保存到下一个元素中,直到把这1000次搞定,利用字符串方式模拟输出。
#include
using namespace std;
int main(int argc, char *argv[])
{
double log2 = 0.30102999566398119;
int n, digits;
n=1000;
digits = (int)(n*log2+1)/4+2;
int *num = new int[digits];
memset(num, 0, sizeof(int) * digits);
int p, q, r=1;
p = n%16;
q = n>>4;
num[0] = 1;
num[0] <<= p;
num[1] = num[0]/10000;
num[0] %= 10000;
for(int i=0, g; i {
g=0;
for(int j=0; j
num[j] <<= 16;
num[j] += g;
g = num[j]/10000;
num[j] %= 10000;
}
while(g)
{
num[r++]=g%10000;
g/=10000;
}
}
for( ; !num[r]; --r) ;
printf("%d", num[r--]);
if(r>0)
for(r; r>=0; --r)
printf("%04d", num[r]);
delete []num;
system("PAUSE");
return 0;
}
int mul=2;
for(int i=0;i<1000,i++)
{
mul=mul*2;
}