You need to enable JavaScript to run this app. 不导入BigInteger实现大整数相乘时负数符号输出错误问题求助
优惠活动
大模型
产品
解决方案
定价
更多

不导入BigInteger实现大整数相乘时负数符号输出错误问题求助

问题原因

你在处理符号的第一步就把输入字符串x和y的负号截取掉了,后续判定最终结果符号时,再去读取修改后的x、y的首字符,肯定找不到'-'标记,所以整个符号判定逻辑完全失效。

修复方案

提前用独立变量存储最终结果的符号,不要依赖已经被修改过的输入字符串做符号判定:

  1. 读取两个输入字符串后,先根据两个输入的符号判定最终结果的正负
  2. 统一去掉两个输入的负号,执行无符号大整数乘法逻辑
  3. 所有数值计算完成后,再根据提前存储的符号位决定是否给结果添加负号
修复后的完整代码
import java.util.Scanner;

public class BigIntMultiply {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("输入第一个数字:");
        String x = scan.nextLine();
        
        System.out.println("输入第二个数字:");
        String y = scan.nextLine();

        // 提前存储结果符号:两数符号不同时结果为负
        boolean isNegative = false;
        if ((x.charAt(0) == '-' && y.charAt(0) != '-') || (x.charAt(0) != '-' && y.charAt(0) == '-')) {
            isNegative = true;
        }

        // 统一去掉两个数的负号,只做正数乘法
        if (x.charAt(0) == '-') {
            x = x.substring(1);
        }
        if (y.charAt(0) == '-') {
            y = y.substring(1);
        }
        
        String s1 = new StringBuffer(x).reverse().toString();
        String s2 = new StringBuffer(y).reverse().toString();
        
        int[] m = new int[s1.length() + s2.length()];
        
        for (int i=0; i<s1.length(); i++) {
            for (int j=0; j<s2.length(); j++) {
                m[i+j] = m[i+j] + (s1.charAt(i) - '0') * (s2.charAt(j) - '0');
            }           
        }
        
        String product = "";
        
        for (int i=0; i<m.length; i++) {
            int digit = m[i] % 10;
            int carry = m[i] / 10;
            if (i+1 < m.length) {
                m[i+1] = m[i+1] + carry;
            }
            product = digit + product;
        }
        
        // 去掉前导0
        while (product.length() > 1 && product.charAt(0) == '0') {
            product = product.substring(1);
        }
        
        // 按提前存储的符号位添加负号
        if (isNegative) {
            product = new StringBuffer(product).insert(0, '-').toString();
        }
        System.out.println("相乘结果为:\n" + product);
        
        scan.close();
    }
}

内容的提问来源于stack exchange,提问作者Jozko Fajecka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 14:09:02