C++ 高精度乘法

来源:互联网 发布:重工刺绣衣服知乎 编辑:程序博客网 时间:2024/06/18 18:50

目描

给定两个位数超过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;    }}


0 0
原创粉丝点击