1. 程式人生 > >演算法提高 高精度乘法 ————大數乘法

演算法提高 高精度乘法 ————大數乘法

問題描述   在C/C++語言中,整型所能表示的範圍一般為-231到231(大約21億),即使long long型,一般也只能表示到-263到263。要想計算更加規模的數,就要用軟體來擴充套件了,比如用陣列或字串來模擬更多規模的數及共運算。
  現在輸入兩個整數,請輸出它們的乘積。 輸入格式   兩行,每行一個正整數,每個整數不超過10000位 輸出格式   一行,兩個整數的乘積。 樣例輸入 99
101 樣例輸出 9999 資料規模和約定

  每個整數不超過10000位

就是大數乘法

#include <iostream>    
#include <cstdio>
using namespace std;
int a[10000],b[10000],ans[20000]={0};
int main() {
	string s1,s2;
	cin>>s1>>s2;
	for(int i=0;i<s1.length();i++)
		a[i]=s1[i]-'0';
	for(int i=0;i<s2.length();i++)
		b[i]=s2[i]-'0';
	for(int i=0;i<s1.length();i++)
		for(int j=0;j<s2.length();j++)
		{
			ans[i+j]+=a[i]*b[j];
		}
	for(int i=s1.length()+s2.length()-1;i>0;i--)
	{
		if(ans[i]>=10)
		{
			ans[i-1]+=ans[i]/10;
			ans[i]%=10; 
		}
	}
	for(int i=0;i<s1.length()+s2.length()-1;i++)
		printf("%d",ans[i]);
	return 0;
}