高精度除法(高精度除以低精度)

给定一个高精度数和一个低精度数(在int范围),求相除的结果的整数部分和余数

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<string>

using namespace std;

typedef vector<int> ve;//用ve代替vector<int>,避免麻烦

int c;

ve exc(ve& A, int b)
{
    int t = 0;//用t来储存每次相除的值
    ve C;
    for (int i = 0; i < A.size(); i++)
    {
        t = t * 10 + A[i];//上次的余数乘以10再加上这次的数
        C.push_back(t / b);
        t %= b;
    }

    c = t;//将余数放入c中储存

    reverse(C.begin(), C.end());//反转
    while (C.size() > 1 && C.back() == 0) C.pop_back();//如果最高位有0,将最高位的0去除

    return C;
}

int main()
{
    string sum1;//因为数据太大,所以用string定义来输入
    int b;
    cin >> sum1 >> b;

    ve A;

    //循环,将sum1中的值放入A中
    for (int i = 0; i < sum1.size(); i++) A.push_back(sum1[i] - '0');

    ve res;

    res = exc(A, b);

    for (int i = res.size() - 1; i >= 0; i--)//倒着输出,因为储存是高位在后,低位在前
    {
        cout << res[i];
    }

    cout << " " << c << endl;
    return 0;
}
posted @ 2021-12-14 14:27  ora12321  阅读(66)  评论(0)    收藏  举报