70,022
社区成员




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10000
int main(int argc, char *argv[]) {
int n;
scanf("%d",&n);
char result[N];
int i;
for(i=0;i<N;i++){
result[i]=0;
}
result[N-1] = 2;
char offset = 0;
int j;
for(i=1;i<n;i++)
{
int flag = 0;
j = N-1;
while (1) {
if(result[j]+offset==0){
if(++flag==5) //我查了2的乘方表,发现连续有五个0,就意味着没有更多的位数了。这是我的想法。
break;
}
else flag = 0;
result[j] = 2*result[j] + offset;
if(result[j]>=10)
{
offset = 1;
result[j] = result[j] - 10;
j--;
continue;
}
offset = 0;
j--;
}
}
// for (j=j;j<N;j++ )
// {
// printf("%c",result[j]+'0');
// }
// printf("\n");
int sum=0;
for(i=j;i<N;i++)
{
sum = sum + result[i];
}
printf("%d",sum);
}
int main() {
string s1,s2,res;
s1="1";
s2="2";
for (int i=1;i<=10000;i++) {res=MUL_INT(s1,s2);s1=res;}
cout<<res<<endl;
return(0);
}
运行约36秒,结果:
199506311688075838……774304792596709376
共3011位。
x=1;
k=1;
whle(n)
{
if(n%2==1)
x=x*k;//当然这里得是大数乘法
k=k*2;
n=n/2;
bool isEven(int n)
{
return n%2 == 0;
}
long pow(long x, int n)
{
if (n == 0)
return 1;
if (n == 1)
return x;
if(isEven(n))
return pow(x*x, n/2);
else
return pow(x*x, n/2)*x;
}