加载中...

【题解】高精度乘法


步骤

  1. 将b按位与A中每一位相乘,并将结果存在t中。
  2. c是结果数组,每次b与A的某一位乘完加入到t中后,都将t的最后一位加入到c中。
  3. b与A每一位乘完后,如果t还有剩余,将t从低位依次加入到c中。
  4. 去掉c中的前导零。

细节

  1. c.back() :返回vector数组最后一个元素的值。
  2. c.pop_back() :将vector数组最后一个元素删除。

c++

#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <vector>

const int N = 1e5 + 10;

using namespace std;

typedef vector<int> VT;

string a;
int b;

VT mul(VT A, int b)
{
    int t = 0;
    VT C;
    for (int i = 0; i < A.size(); ++ i) 
    {
        t += A[i] * b;
        C.push_back(t % 10);
        t /= 10;
    }
    // 若t不为0,将t依次加入C中
    while (t) 
    {
        C.push_back(t % 10);
        t /= 10;
    }
    // 去除前导0
    while (C.size() > 1 && C.back() == 0) C.pop_back();
    return C;
}

int main()
{
    cin >> a >> b;
    VT A;
    for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');

    VT C = mul(A, b);
    for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];
    return 0;
}

文章作者: 心意
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 心意 !
评论
  目录