C++ 大数乘法

<span style="font-size:32px;">高精度乘法运算</span>

目描

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


    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/gf574723691/article/details/52260115
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞