• 【51nod1028】大数乘法 V2 问题——压位


    本来是应该用FFT的,但是我不会......

    于是就直接把每六位压成一位上高精乘就好啦。

    不过注意由于取模操作常数巨大,不能每次都执行,应该是全部做完从后往前扫一遍进位。

    然后就O(len2)过2万><

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 typedef long long LL;
     5 using std::max;
     6 const int N=1e5+10,mod=1e6;
     7 char ch[N],tt[N];
     8 int tot=0,sum=0;
     9 LL ans[N],a[N],b[N];
    10 int le,len;
    11 int main(){
    12     scanf("%s %s",ch+1,tt+1);
    13     le=strlen(ch+1);len=strlen(tt+1);
    14     for(int i=le;i>=1;i-=6){
    15         int pp=0;
    16         for(int j=max(1,i-5);j<=i;j++)pp=pp*10+ch[j]-48;
    17         a[++tot]=pp;
    18     }
    19     for(int i=len;i>=1;i-=6){
    20         int pp=0;
    21         for(int j=max(1,i-5);j<=i;j++)pp=pp*10+tt[j]-48;
    22         b[++sum]=pp;
    23     }
    24     for(int i=1;i<=sum;i++)
    25         for(int j=1;j<=tot;j++)
    26             ans[i+j-1]+=b[i]*a[j];
    27     for(int i=1;i<=sum+tot-1;i++){
    28         LL p=ans[i]/mod;
    29         ans[i+1]+=p;
    30         ans[i]%=mod;
    31     }    
    32     bool flag=0;
    33     for(int i=sum+tot;i>=1;i--){
    34         if(!flag&&!ans[i])continue;
    35         if(!flag)printf("%lld",ans[i]),flag=1;
    36         else printf("%06lld",ans[i]);
    37     }
    38         return 0;
    39 }
    51nod 1028
  • 相关阅读:
    MongoDB pymongo模块 删除数据
    MongoDB pymongo模块 查询
    MongoDB pymongo模块 插入数据
    MongoDB pymongo模块 更新数据
    pymongo模块 目录
    POJ 1579
    POJ 1631
    POJ 1573
    POJ 1607
    POJ 1552
  • 原文地址:https://www.cnblogs.com/JKAI/p/7726932.html
Copyright © 2020-2023  润新知