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