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

Java如何实现给定被除数除数的逐步骤长除法过程格式化输出?

长除法格式化实现思路

核心对齐逻辑

所有行的右边缘统一对齐到被除数的最右侧位置,你可以先把除数、被除数都转成字符串,提前算出全局基准参数:

  • div_s:转成字符串的除数
  • dvd_s:转成字符串的被除数
  • prefix_len:长除法左侧固定前缀的长度,等于 len(div_s) + 2,对应x | (空格+竖线+空格)的总长度
  • total_width:所有输出行的最大宽度,等于 prefix_len + len(dvd_s)

顶部商与余数格式化

先算出最终商q = dividend // divisor、余数r = dividend % divisor,把商和余数拼接成{q} r {r}的字符串,直接右对齐到total_width的宽度即可,就能实现和被除数对齐的效果。

减法循环格式化逻辑

逐位计算商的过程中,每一步要输出两个内容:

  1. 当前要减的乘积:格式为-{product},右对齐到当前处理到的被除数对应数位的位置,比如第一次处理被除数前两位,乘积的右边缘就对齐到第二位的位置
  2. 减完的差+落下的下一位被除数:直接右对齐到total_width宽度即可

可运行Python实现示例

def print_long_division(dividend, divisor):
    # 基础参数预处理
    div_s = str(divisor)
    dvd_s = str(dividend)
    prefix_len = len(div_s) + 2
    total_width = prefix_len + len(dvd_s)
    q = dividend // divisor
    r = dividend % divisor
    
    # 打印顶部商和余数
    top_line = f"{q} r {r}".rjust(total_width)
    print(top_line)
    # 打印除数+竖线+被除数行
    second_line = f"{div_s} | {dvd_s}"
    print(second_line)
    
    # 逐步骤计算减法部分
    current = 0
    digit_pos = 0 # 当前处理到被除数的第几位
    while digit_pos < len(dvd_s):
        # 落下当前位的数字
        current = current * 10 + int(dvd_s[digit_pos])
        digit_pos += 1
        if current < divisor:
            continue
        
        # 计算当前位的商和乘积
        current_q = current // divisor
        product = current_q * divisor
        # 乘积行的对齐位置:当前处理到的数位对应的右对齐宽度
        product_align = prefix_len + digit_pos
        product_line = f"-{product}".rjust(product_align)
        print(product_line)
        
        # 计算差
        current -= product
        # 差的行(还有未处理的位就拼接下一位,最后一步直接输出余数)
        if digit_pos < len(dvd_s):
            next_digit_line = f"{current}{dvd_s[digit_pos]}".rjust(total_width)
            print(next_digit_line)
    # 最后打印余数
    remainder_line = f"{r}".rjust(total_width)
    print(remainder_line)

# 测试用例
print_long_division(127,5)

运行后输出完全匹配你给出的预期格式。

内容的提问来源于stack exchange,提问作者Ethan Villarosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:42:02