1. 程式人生 > >C++實現——兩個大數相乘

C++實現——兩個大數相乘

這裡寫圖片描述

#include <iostream>
#include <vector>
#include <string>
using namespace std;
//大數相乘
/**
*num1 乘數1
*num2 乘數2
*return 結果字串
*/
string BigMutiple(string num1, string num2){

    string res="";
    //兩個數的位數
    int m = num1.size(), n = num2.size();

    //一個i位數乘以一個j位數,結果至少是i+j-1位數
    vector
<long long>
tmp(m + n - 1); //每一位進行笛卡爾乘法 for (int i = 0; i < m; i++){ int a = num1[i] - '0'; for (int j = 0; j < n; j++){ int b = num2[j] - '0'; tmp[i + j] += a*b; } } //進行進位處理,注意左側是大右側是小 int carry = 0; for (int i = tmp.size() - 1
; i >= 0; i--){ int t = tmp[i] + carry; tmp[i] = t % 10; carry = t / 10; } //若遍歷完仍然有進位 while (carry != 0){ int t = carry % 10; carry /= 10; tmp.insert(tmp.begin(), t); } //將結果存入到返回值中 for (auto a : tmp){ res = res + to_string(a); } if
(res.size()>0&&res[0]=='0')return "0"; return res; } //測試函式 int main(){ string num1, num2; while (cin >> num1 >> num2){ cout << BigMutiple(num1, num2) << endl; } return 0; }