1. 程式人生 > >C++ 高精度乘法

C++ 高精度乘法

目描

給定兩個位數超過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;
    }
}