如何仅使用基本算术得到正数的整数部分

时间:2018-11-17 18:42:46

标签: algorithm math

这是一个学校的问题,像往常一样重新发明了轮子。

我被允许使用基本算术+-*/和比较,但显然不允许使用强制转换。

该方法必须高效,因此我考虑将变量乘以2,直到变大为止,然后在包含要提取整数部分的实数的2的幂之间进行二项搜索。

但是,在下一节中,不允许我使用这些基本算术和整数与浮点数之间的比较,只能在2个整数或2个浮点数之间进行比较。

我找不到任何解决方案...

1 个答案:

答案 0 :(得分:1)

您可以遵循乘以2的想法,以超过该值,然后进行二分搜索(也称为二进制搜索)以获得所需的整数。但是,由于不允许将浮点数与整数进行比较,因此请以两个值开头,即浮点1.0和整数1。用浮点值进行所有乘法和比较,然后在每一步上对浮点值做任何操作,对整数值也做同样的事情。因此,在任何时候,浮点值和整数值都相等,并且将浮点值用于所有与给定值的比较。

因此,如果给定值为3.1416,则从1.01的初始猜测值开始。 1.0小于3.1416,因此您将猜测加倍并且得到2.02。浮点数2.0仍然小于3.1416,因此您将两个猜测再次加倍并得到4.04。您的浮动猜测4.0最终太高,因此您使用二进制搜索并尝试3.03。浮动猜测很低。但是,您的整数猜测3与先前的4整数猜测只有一个距离,因此您已经完成。因此,最终的整数结果为3