You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算两个整数之间的总数字位数?不同位数场景求解

解决思路:拆分区间+分阶段计算

核心逻辑是把位数不同的大区间拆分成多个位数相同的子区间,分别计算每个子区间的总位数后求和,具体步骤如下:

1. 统一区间顺序

先确保计算的起始数start ≤ 结束数end,如果输入的两个数顺序相反,先交换位置。

2. 拆分同位数子区间

找出从start的位数到end的位数之间的每一个位数等级(比如1位、2位、…、n位),对每个等级单独处理:

  • 对于第k位的数,默认范围是10^(k-1)到10^k - 1(比如1位是1-9,2位是10-99)
  • 结合实际的start和end,确定当前子区间的实际边界:
    • 若当前位数等级是start所在的等级,子区间起始为start,结束为min(10^k - 1, end)
    • 若当前位数等级是中间过渡等级,子区间直接用完整的10^(k-1)到10^k - 1
    • 若当前位数等级是end所在的等级,子区间起始为10^(k-1),结束为end

3. 计算每个子区间的总位数

每个子区间的总位数 = 位数k × 子区间内的整数个数(结束数 - 起始数 + 1)

4. 累加所有子区间结果

把每个子区间的计算结果相加,得到最终的总数字位数。


代码示例(Python)

def count_total_digits(start, end):
    # 统一区间顺序
    if start > end:
        start, end = end, start
    
    total = 0
    current = start

    # 获取数字的位数
    def get_digit_count(num):
        if num == 0:
            return 1
        count = 0
        n = abs(num)  # 兼容负数场景
        while n > 0:
            count += 1
            n = n // 10
        return count
    
    current_digits = get_digit_count(current)
    end_digits = get_digit_count(end)
    
    while current_digits <= end_digits:
        max_num = 10 ** current_digits - 1
        segment_end = min(max_num, end)
        # 累加当前子区间的总位数
        total += current_digits * (segment_end - current + 1)
        # 切换到下一位数区间的起始
        current = max_num + 1
        current_digits += 1
    
    return total

# 测试示例:3到5698的总位数
print(count_total_digits(3, 5698))

额外说明

  • 代码已兼容负数场景:负数的数字位数按其绝对值计算(比如-123的位数为3),如果需要把负号算一位,只需在get_digit_count中对负数额外加1即可
  • 单独处理了0的情况,确保0的位数为1

内容的提问来源于stack exchange,提问作者M.A.A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:25:24