高精度除法(高精度除以低精度)
给定一个高精度数和一个低精度数(在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;
}

浙公网安备 33010602011771号