大數:即超過了計算機定義類型的範圍的數,如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;
}