zoukankan      html  css  js  c++  java
  • 高精度乘法

    具体见代码

    0需特判!!!

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<iostream>
     5 using namespace std;
     6 
     7 struct bignum{
     8     int y[50005];
     9     //全部倒存 
    10     bignum()
    11         {memset(y,0,sizeof(y));} 
    12     
    13     bignum operator * (const bignum x) const
    14     {
    15         if((y[0]==1 and y[1]==0)or(x.y[0]==1 and x.y[1]==0))
    16         {
    17             bignum re;re.y[0]=1,re.y[1]=0;
    18             return re;
    19         }//本算法的唯一缺陷在于要特判0 
    20         bignum re;re.y[0]=y[0]+x.y[0]-1;
    21         //初始化位数表示无进位时的最小长度 
    22         for(int i=1;i<=y[0];i++)
    23             for(int j=1;j<=x.y[0];j++)
    24                 re.y[i+j-1]+=y[i]*x.y[j];
    25         //由于我是从1开始计算位数的
    26         //所以是i+j-1 
    27         for(int i=1;i<re.y[0];i++)
    28             if(re.y[i]>9) re.y[i+1]+=re.y[i]/10,re.y[i]%=10;
    29         //进位    
    30         while(re.y[re.y[0]+1]) re.y[0]++;
    31         
    32         return re;
    33     }
    34 }; 
    35 
    36 string b1,b2;
    37 bignum q,w,c;
    38 
    39 int main()
    40 {
    41     cin>>b1>>b2;
    42     q.y[0]=b1.size(),w.y[0]=b2.size();
    43     for(int i=0;i<q.y[0];i++) q.y[i+1]=b1[i]-'0';
    44     for(int i=0;i<w.y[0];i++) w.y[i+1]=b2[i]-'0';
    45     reverse(q.y+1,q.y+1+q.y[0]);
    46     reverse(w.y+1,w.y+1+w.y[0]);
    47     
    48     c=q*w;
    49         
    50     reverse(c.y+1,c.y+1+c.y[0]);
    51     for(int i=1;i<=c.y[0];i++) printf("%d",c.y[i]);
    52     return 0;
    53 } 
  • 相关阅读:
    网络优化改进
    图像识别和卷积神经网路案例的实现
    卷积神经网络和图像识别
    ANA网络分析
    大数阶乘
    HDU 1002 A + B Problem II (大数加法)
    HDU 1232 畅通工程 (并查集)
    HDU 1231 最大连续子序列 (dp)
    HDU 2546 饭卡 (dp)
    HDU 1203 I NEED A OFFER! (dp)
  • 原文地址:https://www.cnblogs.com/shzyk/p/9797517.html
Copyright © 2011-2022 走看看