不使用列表与字符串计算整数连续数位绝对差之和的实现方法
不使用列表、字符串实现连续数位绝对差之和的方案
核心思路
不需要存储所有数位,仅需保留上一次取出的数位值,每次计算当前位与上一位的绝对差并累加即可。原因是绝对差的计算不受顺序影响,|a - b| = |b - a|,从右往左取数位计算结果和从左往右完全一致。
实现代码
n = abs(int(input())) sum_diff = 0 # 先取出个位作为初始上一位值 prev = n % 10 n = n // 10 while n > 0: current = n % 10 # 累加当前位与上一位的绝对差 sum_diff += abs(current - prev) # 更新上一位值为当前位,进入下一轮计算 prev = current n = n // 10 print(sum_diff)
测试验证
以你举的整数2735为例:
- 第一步取出个位5,prev=5,剩余待处理数值为273
- 取出当前位3,计算得
|3-5|=2,sum_diff=2,prev更新为3,剩余待处理数值为27 - 取出当前位7,计算得
|7-3|=4,sum_diff=6,prev更新为7,剩余待处理数值为2 - 取出当前位2,计算得
|2-7|=5,sum_diff=11,剩余待处理数值为0,循环结束 - 最终输出11,和手动计算的
|2-7|+|7-3|+|3-5|结果完全一致
如果输入是个位数,循环不会执行,直接输出0,符合单数字无连续数位差的规则。
内容的提问来源于stack exchange,提问作者Ole
相关产品推荐
相关产品推荐

