如何使用def函数及循环编写求给定数最接近整百值的程序
最近整百值查找实现方案
实现核心逻辑很明确:先定位离输入值最近的两个整百边界(一个比输入值小、一个比输入值大),分别计算输入值和两个边界的差值,返回差值更小的边界即可;如果两边差值恰好相等(比如150离100、200的差都是50),按通用规则取数值更大的上界即可。两种基于循环的自定义函数实现如下:
while循环版本
通过while循环逐次递减找到比输入值小的最大整百作为下界,上界直接取下界加100,再比较差值返回结果,不需要提前估算遍历范围:
def find_closest_hundred(num): # 提前记录符号,负数统一转绝对值计算后再还原 flag = -1 if num < 0 else 1 abs_num = abs(num) # 向下遍历找整百下界 lower_bound = abs_num while lower_bound % 100 != 0: lower_bound -= 1 upper_bound = lower_bound + 100 # 比较差值返回结果 if abs_num - lower_bound < upper_bound - abs_num: return flag * lower_bound return flag * upper_bound
常规场景测试结果:
- 输入
120返回100 - 输入
172返回200 - 输入
150返回200 - 输入
-240返回-200 - 输入
-260返回-300
for循环版本
先锁定遍历范围(输入值前后200的区间必然覆盖两个相邻整百边界),按100步长遍历所有候选整百值,实时记录差值最小的结果即可,不需要额外处理正负数符号:
def find_closest_hundred(num): res = None min_gap = float('inf') # 计算遍历起点,覆盖输入值前后足够范围 traverse_start = (int(num) // 100) * 100 - 100 # 遍历3个整百候选值即可覆盖所有情况 for val in range(traverse_start, traverse_start + 300, 100): current_gap = abs(num - val) if current_gap < min_gap: min_gap = current_gap res = val elif current_gap == min_gap: # 差值相等时取更大的整百,需要取下界就改成min res = max(res, val) return res
如果你的业务规则对差值相等的场景有不同要求,只需要修改等值分支的判断逻辑即可。
内容的提问来源于stack exchange,提问作者user19430419
相关产品推荐
相关产品推荐

