天天看點

大數的基本運算——大數乘法

大數:即超過了計算機定義類型的範圍的數,如126349678984*1321656546446546546546,這種運算的結果

太大,超過了基本類型的範圍,發生溢出,這樣我們就需要運用大數的算法來解決這個問題了。

大數乘法:

/*
 *    大數乘法
 */
#include <iostream>
#include <string.h>
using namespace std;

void big_multiply(const char *a,const char *b)
{
    int sizea,sizeb;
    sizea=strlen(a);
    sizeb=strlen(b);

    int *result=(int *)malloc(sizeof(int)*(sizea+sizeb));

    for(int i=0;i<sizea+sizeb;i++)
        result[i]=0;

    for(int i=0;i<sizea;i++)
        for(int j=0;j<sizeb;j++)
        {
            result[i+j+1]+=(a[i]-'0')*(b[j]-'0');//空一位出來為後面的進位提供空間
        }

    for(int i=sizea+sizeb-1;i>=0;i--)//這裡需要對result數組進行倒序的處理
    {
        if(result[i]>9)
        {
            result[i-1]+=result[i]/10;//先把該進位的提出
            result[i]=result[i]%10;//得到餘數
        }
    }
    int i=0;
    while(result[i]==0) i++;//目前面有為0的位時就計數,得到前面0的個數,後面就從第一個不是0的位輸出
    for(int j=i;j<sizea+sizeb;j++)
        cout<<result[j];
}

int main()
{
    string a,b;
    cout<<"超大數運算"<<endl<<"請輸入兩個大數:";
    cin>>a>>b;
    const char* p1=a.c_str();//格式轉換
    const char* p2=b.c_str();
    big_multiply(p1,p2);
    return 0;
}
           
大數的基本運算——大數乘法
大數的基本運算——大數乘法

繼續閱讀