project euler problem 16:2^1000结果各位数求和

题意:就是求2^1000之后,结果各位数求和。

思路:看到这题的时候有种似曾相识的感觉,因为POJ 1604求的是阶乘,所以方法是一样的。

而1604的方法如下:

for(i=2;i<=n;i++)  
    {  
        c=0;  
        for(j=0;j<M;j++)  
        {  
            s=f[j]*i+c;  
            f[j]=s%10;  
            c=s/10;  
        }  
    }

都是求的是大数相乘,所以高精度的方法一样。因为做过,方法还记得,只要改下循环里面的 i 就行了。具体如下:这是我所以用的,不用字符数组的求法,简单明了,而且很实用,这是大神们创造出来的!!!

#include <iostream>
#include <map>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
#define M 3000
int f[M];
int main()
{
    int j,i,c,s,sum=0;
    memset(f,0,sizeof(f));
    f[0]=1;
    for(i=1; i<=1000; i++)
    {
        c=0;
        for(j=0; j<1000; j++)
        {
            s=f[j]*2+c;
            f[j]=s%10;
            c=s/10;
        }
    }
    for(j=0; j<3000; j++)
        sum+=f[j];
    cout<<sum<<endl;
    return 0;
}

你可能感兴趣的:(project euler problem 16:2^1000结果各位数求和)