您的位置:首页 > 其它

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

2016-09-11 20:09 288 查看
除法是整个高精度当中最难的一个

————————————华丽的分割线————————————

首先还是让我们模拟一下大数除大数的方法。

例: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: