• HOME
  • ARCHIVE
  • CATEGORIES
  • TAGS
  • LINKS
  • ABOUT

rsky

  • HOME
  • ARCHIVE
  • CATEGORIES
  • TAGS
  • LINKS
  • ABOUT
Quiet主题
  • C++

C++ 高精度

rsky
学习笔记

2024-03-25

高精度加法

#include <bits/stdc++.h>
using namespace std;

vector<int> operator+(vector<int> x, vector<int> y)
{
    if (x.size() > y.size()) return y + x;
    int t = 0;
    vector<int> z;
    for (int i = 0; i < y.size(); i++)
    {
        t += y[i];
        if (i < x.size())
            t += x[i];
        z.push_back(t % 10);
        t /= 10;
    }
    if (t)
        z.push_back(t);
    reverse(z.begin(),z.end());
    return z;
}

int main()
{
    string a, b;
    vector<int> x, y, z;
    cin >> a >> b;
    for (int i = a.size() - 1; i >= 0; i--)
        x.push_back(a[i] - '0');
    for (int i = b.size() - 1; i >= 0; i--)
        y.push_back(b[i] - '0');
    z = x + y;
    for (auto i : z)
        cout << i;
}

高精度乘法

#include <bits/stdc++.h>
using namespace std;

vector<int> operator*(vector<int> x, vector<int> y)
{
    int t = 0;
    vector<int> z(x.size() + y.size(), 0);
    for (int i = 0; i < x.size(); i++)
        for (int j = 0; j < y.size(); j++)
            z[i + j] += x[i] * y[j];

    for (int i = 0; i < z.size() - 1; i++)
    {
        z[i + 1] += z[i] / 10;
        z[i] %= 10;
    }
    while (z.size() > 1 && z.back() == 0) z.pop_back();
    reverse(z.begin(), z.end());
    return z;		
}

int main()
{
    string a, b;
    vector<int> x, y, z;
    cin >> a >> b;
    for (int i = a.size() - 1; i >= 0; i--)
        x.push_back(a[i] - '0');
    for (int i = b.size() - 1; i >= 0; i--)
        y.push_back(b[i] - '0');
    z = x * y;
    for (auto i : z)
        cout << i;
}
上一篇

中缀表达式转后缀表达式并计算

下一篇

记一次Linux grub引导修复

Quiet Theme © 赣ICP备2023006710号