【算法详解-高精】(6)不可避免的时间复杂度

除法是整个高精度当中最难的一个
————————————华丽的分割线————————————
首先还是让我们模拟一下大数除大数的方法。
例:4321/40
首先我们把除数和被除数高位对齐
然后一看:43>40,可以除,于是愉快的在答案第3位写了一个1
然后321/40
我们一看:32<40不能除,怎么办,就把下一位加上:321/40=8,愉快的写下8。
然后不能除了,答案就是108
所以我们开始写代码:
先判断被除数是否小于除数,有就返回0。
否者开始乱搞算法:
先把被除数一定长度的数取出:

for(i=b_.len=a.len,i--,j=b.len-1;j>=0;j--,i--)b_.s[i]=b.s[j];

然后判断这一部分与除数的大小关系以加上下一位。
最后让被除数持续减到不能减为止。
end
————————————华丽的分割线————————————
然后讲高精除int
Q:不是有高精除高精为什么还有高精除int不是吧int转高精就没了?
A:你有没有考虑上面那个算法的时间复杂度。。。
(其实我的代码里是int转高精但是还是要讲一下)
算法很短,但很神奇。
首先我们记一个tot(int)和ans(高精)
然后从高位算起每次读入一个最高位然后试除结果加入答案
一直算下去直到每个位都算完
听得懂吧。。。
————————————华丽的分割线————————————
四则运算:end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值