高精度(4)——高精度除法
题目描述
给定两个非负整数(不含前导 0)A ,B ,请你计算 A / B 的商和余数。
输入格式
共两行,第一行包含整数A ,第二行包含整数 B。
输出格式
共两行,第一行输出所求的商,第二行输出所求余数。
数据范围
1≤A的长度≤100000,
1 ≤ B ≤ 10000 ,
B 一定不为 0
输入样例
7
2
输出样例
3
1
注释版代码
参考高精度(1)(2)(3)部分注释
高精度(1)——高精度减法-CSDN博客
高精度(2)——高精度加法-CSDN博客
高精度(3)——高精度乘法-CSDN博客
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> div(vector<int>&A,int b,int &r)//这里取地址就可以把r的值传回去
{vector<int> C;r=0;//r为余数for(int i=A.size()-1;i>=0;i--)//加法减法乘法都是从个位开始计算,但是除法是从最高位开始计算{int m=r*10+A[i];//设m为用来除的数,应该是余数×10加上后一位的数C.push_back(m/b);//得到的那个数就是m对b整除r=m%b;//余数就是m对b取余}reverse(C.begin(),C.end());//因为这样得出来是反着的,所以转一下,所以用到了开头的#include<algorithm>while(C.size()>1&&C.back()==0)C.pop_back();//去除前导零return C;
}
int main()
{string a;int b,r;vector<int> A;cin>>a>>b;for(int i=a.size()-1;i>=0;i--){A.push_back(a[i]-'0');}auto C=div(A,b,r);for(int i=C.size()-1;i>=0;i--){printf("%d",C[i]);}cout<<endl<<r<<endl;return 0;
}