Python中如何向上取整得到下一个末位为2的整数
自定义整数取整实现方案
规则本质拆解
你给出的映射关系,对应的目标值是大于等于输入整数、形如10*k + 2(k为正整数)的最小值,目标序列为12、22、32、42、52…的公差为10的等差数列,并非常规取整场景下的“某数的倍数序列”,这也是之前参考的通用倍数取整方案无法适配的核心原因。
对所有给定示例逐一校验规则匹配度:
- 输入10:序列中第一个大于等于10的值为12,匹配映射结果
- 输入21:序列中第一个大于等于21的值为22,匹配映射结果
- 输入22:序列中第一个大于等于22的值为22,匹配映射结果
- 输入23:序列中第一个大于等于23的值为32,匹配映射结果
- 输入34:序列中第一个大于等于34的值为42,匹配映射结果
实现逻辑推导
从不等式关系出发,找到最小正整数k满足10*k + 2 ≥ x,对不等式变形:
10*k ≥ x - 2
k ≥ ⌈(x-2)/10⌉
为避免浮点数取整的精度问题,可以用纯整数运算替代ceil计算:对于正整数分母10,向上取整等价于(x -2 + 10 -1) //10,化简后得到k的计算式为(x +7) //10。
代码实现
def custom_round(x: int) -> int: k = (x + 7) // 10 return k * 10 + 2
配套的校验代码:
# 匹配示例的测试逻辑 test_inputs = [10, 21, 22, 23, 34] expected_outputs = [12, 22, 22, 32, 42] for inp, exp in zip(test_inputs, expected_outputs): result = custom_round(inp) assert result == exp, f"输入{inp} 计算得到{result},不符合预期{exp}" print("全部示例校验通过")
内容的提问来源于stack exchange,提问作者Paweł Kowalski
相关产品推荐
相关产品推荐

