👦个人主页:Weraphael
✍🏻作者简介:目前是C语言 + 算法学习者
✈️专栏:【C/C++】算法
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍
往期我们学习了高精度加法、高精度减法 和 高精度乘法,本站就是高精度算法最后一站了!闲言少叙,开快车🚝🚝
前提:两个数都是正整数。当被除数的位数非常长时,再同时除以上位数较短的b。最后结果大到
unsigned long long
都存不了,这就要用到高精度除法。
高精度算法同样也是计算机模拟人类竖式计算,并将其转化计算机语言的过程。
现在来回忆一下,小学除法我们是如何列竖式来解决的
vector
数组中。存进数组的时候一定要=倒着存入。t = 0
,两数相除,t = t * 10 + A[i]
,t
临时用来存储每一次余数的结果。t / b
即是商,为了保留上一步的余数t
,只需要将t = t % b
t
就是余数#include
#include
#include using namespace std;vector div(vector &A, int b, int &t)
{vector C;//存储答案t = 0;//初始化余数为0//除法从高位开始算起for (int i = A.size() - 1; i >= 0; i -- ){//上一次的余数乘10,再加上当前位上的数,就是被除数t = t * 10 + A[i];//商的计算C.push_back(t / b);//保留下一次的余数t %= b;}//翻转是为了方便取出前导0reverse(C.begin(), C.end());//去除前导0while (C.size() > 1 && C.back() == 0) {C.pop_back();}//返回答案return C;
}int main()
{string a;//字符串读入被除数int b; //除数int t; //余数vector A; //读入cin >> a >> b;//倒序存入A中for (int i = a.size() - 1; i >= 0; i -- ) {A.push_back(a[i] - '0');}vector C = div(A, b, t);//输出商for (int i = C.size() - 1; i >= 0; i -- ) {printf("%d",C[i]); }//输出余数printf("\n%d\n",t);return 0;
}
上一篇:Linux系统之部署个人导航页