大整數乘法(高精度)


對於超過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;
 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM