zoukankan      html  css  js  c++  java
  • 大整数乘法(高精度)

    对于超过20位的数的乘法问题,我们无法使用普通的方法!!!即使是longlong也会超出范围的!
    像这样的数,我们只能使用高精度的知识利用数组的方法解决问题!
    对于高精度乘法的问题,其实思路和高精度加法的思路差不多,都需要使用
    字符数组来存放每次算完的结果!
            1  2  3
           *4  5  6
        ________________
          12  15  18
       8  10  12
    4  5   6 
    _____________________
    4 13   28   27  18

    观察这个程序不难发现大整数乘法的规律!!!每次算完先不要进位,
    先把算玩的结果存到一个2维数组里,最后再求他们的和,求完和之后再进位!!!
    最后在逆序输出即可!!哈!!废话不多说,看程序!!!

    #include<iostream>
    #include<cstring>
    using namespace std;
    int main()
    {
     char num1[105],num2[105];
     int Num1[105],Num2[105];
     int Sum[105][105],sum[105];
     int i,j;
     while(gets(num1))//输入第一个乘数
     {
        
      memset(Num1,0,sizeof(Num1));
      memset(Num2,0,sizeof(Num2));
      memset(Sum,0,sizeof(Sum));//将数组初始化!!
      gets(num2);//输入第2个程序!!!
      int s1=strlen(num1),
          s2=strlen(num2);//求出数组的长度!
      for(i=0;i<s1;i++)
       Num1[s1-1-i]=num1[i]-'0';
       for(j=0;j<s2;j++)
      Num2[s2-1-j]=num2[j]-'0';//将字符型数组分别存到整型数组里!!
       for(i=0;i<s1;i++)
        for(j=0;j<s2;j++)
          Sum[i][j+i]=Num1[i]*Num2[j];
       for(i=0;i<s1;i++)
    {
       for(j=i;j<i+s2;j++)
        cout<<Sum[i][j];
       cout<<endl;
    }//依次输出每个中间的加数!!!
       int c=0;//用于表示进位!!!!
       for(j=0;j<s2+s1-1;j++)
     {  
           int s=0;
            for(i=0;i<s1;i++)
             s+=Sum[i][j];
      sum[j]=(s+c)%10;
            c=(s+c)/10;
      
     }//处理进位!!!

       for(i=s1+s2-2;i>=0;i--)
        cout<<sum[i];//逆序输出每个元素!!!求得两个数的积!!!
     cout<<endl;

     }
     return 0;
     }

  • 相关阅读:
    python 小练习 5
    python 小练习4
    python 小练习3
    python 小练习2
    遇到后缀名为whl的库的安装方法
    hdu1394Minimum Inversion Number
    Triangle
    codeforces B. Pasha and String
    F
    C
  • 原文地址:https://www.cnblogs.com/xiohao/p/2797536.html
Copyright © 2011-2022 走看看