ural 1108

大数乘法    不会java   比赛的时候各种细节RE  WA  ........

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
int un[] = {0,0,0,0,0,1,3,6,13,26,52,104,208,416,833,1667,3335,6700};
int a[10010],b[10010],c[10010],ca;
void cc()
{
    int w = 0;
    memset(c, 0, sizeof(c));
    for(int i = 0; i <= un[ca]; i++)
    {
        for(int j = 0; j <= un[ca]; j++)
        {
            c[i+j] += a[i]*b[j];
            if(c[i+j] > 9999)
            {
                w = c[i+j]/10000;
                c[i+j+1] += w;
                c[i+j] %= 10000;
            }
        }
    }
    w = 0;
    for(int i = 0; i <= un[ca]; i++)
    {
        c[i] += w;
        w = c[i]/10000;
        c[i] %= 10000;
    }
    memcpy(a, c, sizeof(c));
    c[0] += 1;
    memcpy(b, c, sizeof(c));
}
int main()
{
    int n;
    scanf("%d",&n);
    memset(a, 0, sizeof(a));
    memset(b, 0, sizeof(b));
    a[0] = 1;
    b[0] = 2;
    ca = 0;
    for(int i = 0; i < n; i++)
    {
        int j;
        for(j = un[ca]; j >= 0; j--)
        {
            if(b[j])
                break;
        }
        //printf("%d\n",j);
        printf("%d",b[j--]);
        for(; j >= 0; j--)
        {
            printf("%.4d",b[j]);
        }
        putchar('\n');
        if(i == n-1)
            break;
        cc();
        ca++;
    }
    return 0;
}


posted @ 2013-07-31 12:17  xlc2845  阅读(109)  评论(0)    收藏  举报