高精度÷低精度
除法思路: 最高位开始除整个b,商就是这位的结果
然后用余数*10之后再加上下一位后作为下一位的被除数继续除以整个b 得下一位的商 …
样例
1234/11 手算结果0112 存入数组C也是0112
去除前导0需要反过来 2110 -> 211 再反着输出为112
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
//除法思路: 最高位开始除整个b,商就是这位的结果
//然后用余数*10之后再加上下一位,作为下一位的被除数继续除以整个b
vector<int> div(vector<int>A,int b ,int &r){// 1234/11 手算结果0112 存入数组C也是0112 去除前导0需要反过来 2110 -> 211 再反着输出为112
r=0;
vector<int>C;
for (int i = A.size()-1; i >= 0; i -- ) {
r=r*10+A[i];
C.push_back(r/b);
r%=b;
}
reverse(C.begin(),C.end());
while(C.size()>1&&C.back()==0) C.pop_back();
return C;
}
int main()
{
int b;
string x;
cin>>x>>b;
vector<int>A;
int r;
for (int i = x.size()-1; i >= 0; i -- ) A.push_back(x[i]-'0');//存到数组中 数组低位对应数的低位
vector<int> C = div(A,b,r);
//倒着输出 因为数组高位是数的高位
for(int i = C.size()-1;i>=0;i--) cout<<C[i];
cout<<endl<<r;
return 0;
}