1 条题解

  • 0
    @ 2025-10-8 17:01:42
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6;
    struct node
    {
        int len, a[N];
        node() {len=1; memset(a, 0, sizeof(a));}
    };
    char s[N];
    node operator*(node n1, node n2)
    {
        node no; no.len=n1.len+n2.len-1;
        for(int i=1; i<=n1.len; i++) for(int j=1; j<=n2.len; j++) no.a[i+j-1]+=n1.a[i]*n2.a[j];
        for(int i=1; i<=no.len; i++)
        {
            no.a[i+1]+=no.a[i]/10;
            no.a[i]%=10;
        }
        int i=no.len;
        while(no.a[i+1]>0)
        {
            i++;
            no.a[i+1]+=no.a[i]/10;
            no.a[i]%=10;
        }
        while(no.a[i]==0 && i>1) i--;
        no.len=i;
        return no;
    }
    node q_pow(node A, int b)
    {
        node C; C.a[1]=1;
        for(; b; b>>=1)
        {
            if(b&1) C=C*A;
            A=A*A;
        }
        return C;
    }
    int main()
    {
        scanf("%s", s+1); int slen=strlen(s+1);
        node n1; n1.len=slen;  int p; scanf("%d", &p);
        for(int i=1; i<=slen; i++) n1.a[slen-i+1]=s[i]-'0';
        node no=q_pow(n1, p); int t=0;
        for(int i=no.len; i>=1; i--)
        {
            t++;
            printf("%d", no.a[i]);
            if(t%70==0) printf("\n");
        }
        printf("\n");
        return 0;
    }
    
    • 1

    *【快速幂】高精度快速幂[Cruel Math Teacher,2009 Feb]

    信息

    ID
    2614
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    37
    已通过
    22
    上传者