您的位置:首页 > 其它

【BZOJ1263】【SCOI2006】整数划分 高精度+构造

2015-03-24 16:36 344 查看

链接:

#include <stdio.h>
int main()
{
    puts("转载请注明出处[vmurder]谢谢");
    puts("网址:blog.csdn.net/vmurder/article/details/44594117");
}


题解:

一直*3就好了,最后如果剩1,那么把最后一个3变成4,如果剩2,直接乘。

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 5010
#define M 100000000
using namespace std;
struct HP
{
    int x
,y;
    void init(){x[0]=1;}
    void mul(int t)
    {
        for(int i=0;i<=y;i++)x[i]*=t;
        for(int i=0;i<=y;i++)
            while(x[i]>=M)
                x[i]-=M,x[i+1]++;
        if(x[y+1])y++;
    }
    void print()
    {
        int cnt=y*8,temp=x[y];
        while(temp)
        {
            temp/=10;
            cnt++;
        }
        printf("%d\n",cnt);

        if(cnt<=100)
        {
            printf("%d",x[y--]);
            while(y>=0)printf("%08d",x[y--]);
        }
        else {
            cnt=100-cnt+y*8;
            printf("%d",x[y--]);
            while(cnt>=8)printf("%08d",x[y--]),cnt-=8;

            temp=M/10;
            while(cnt)
            {
                printf("%d",(x[y]/temp)%10);
                temp/=10;
                cnt--;
            }

        }

    }
}ans;
int n,m;
int main()
{
    int i,j,k;
    int a,b,c;

    scanf("%d",&m);
    ans.init();
    while(m>3)
    {
        if(m==4)
        {
            ans.mul(4);
            ans.print();
            return 0;
        }
        ans.mul(3);
        m-=3;
    }
    ans.mul(m);
    ans.print();
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: