这是一个学校的问题,像往常一样重新发明了轮子。
我被允许使用基本算术+
,-
,*
,/
和比较,但显然不允许使用强制转换。
该方法必须高效,因此我考虑将变量乘以2,直到变大为止,然后在包含要提取整数部分的实数的2的幂之间进行二项搜索。
但是,在下一节中,不允许我使用这些基本算术和整数与浮点数之间的比较,只能在2个整数或2个浮点数之间进行比较。
我找不到任何解决方案...
答案 0 :(得分:1)
您可以遵循乘以2的想法,以超过该值,然后进行二分搜索(也称为二进制搜索)以获得所需的整数。但是,由于不允许将浮点数与整数进行比较,因此请以两个值开头,即浮点1.0
和整数1
。用浮点值进行所有乘法和比较,然后在每一步上对浮点值做任何操作,对整数值也做同样的事情。因此,在任何时候,浮点值和整数值都相等,并且将浮点值用于所有与给定值的比较。
因此,如果给定值为3.1416
,则从1.0
和1
的初始猜测值开始。 1.0
小于3.1416
,因此您将猜测加倍并且得到2.0
和2
。浮点数2.0
仍然小于3.1416
,因此您将两个猜测再次加倍并得到4.0
和4
。您的浮动猜测4.0
最终太高,因此您使用二进制搜索并尝试3.0
和3
。浮动猜测很低。但是,您的整数猜测3
与先前的4
整数猜测只有一个距离,因此您已经完成。因此,最终的整数结果为3
。