C++ 高精度乘法
阿新 • • 發佈:2018-12-29
題目描述:
給定兩個位數不超過100位的正整數,求它們的乘積。
輸入描述:
輸入檔案中包含多個測試數據。每個測試數據佔兩行,分別為一個正整數,
每個正整數的位數不超過100位。輸入數據一直到檔案尾。
輸出描述:
對輸入文件中的每個測試數據,輸出其中兩個正整數的乘積。
樣例輸入:
981567
32976201
123456789
987654321
123456789987654321
987654321123456789
樣例輸出:
32368350686967
121932631112635269
121932632103337905662094193112635269
原始碼:#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string> #include <algorithm> #include <string.h> using namespace std; string BigMul(string s,string t){ int sum[10005] = {0},a[10005],b[10005],tmp,extra,i,j,start,length1,length2; char goal[10005]; reverse(s.begin(),s.end()); reverse(t.begin(),t.end()); length1 = s.length(); length2 = t.length(); for(i = 0;i < length1;i++){ a[i] = (int)(s[i] - '0'); } for(i = 0;i < length2;i++){ b[i] = (int)(t[i] - '0'); } for(i = 0;i < length1;i++){ start = i; for(j = 0;j < length2;j++){ sum[start] += a[i]*b[j]; start ++; } } for(i = 0;i < start;i++){ sum[i + 1] += sum[i] / 10; sum[i] = sum[i] % 10; } while(sum[i] == 0){ i --; } start = 0; for(j = i ;j >= 0;j--){ goal[start] = (char)(sum[j] + '0'); start ++; } goal[start] = '\0'; return (string)goal; } int main(){ freopen("in.txt","r",stdin); string s,t; while(cin>>s>>t){ //cout<<s<<" "<<t<<endl; cout<<BigMul(s,t)<<endl; } }