有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中,数组通过长整数传递9位来发出增量和=0

程序首先要求用户给出一个分配给变量n的值,然后提示用户提交n次长数字。然后,这些数字将被存储到初始化的数组中(ar)。我试图创建aVeryBigSum的函数是循环数组中的数字,通过数组中的数字增加sum=0来提供总和(Java)

然而,出于某种原因,除非我使用两个大于9位的连续数字,否则该程序可以运行

例如:

aVeryBigSum(2,[111111111,111111111])在数组中有n个2位数和两个9位数

输出:

22222222

aVeryBigSum(2,[1111111111,1111111111])在数组中有n个2位数和两个10位数 输出:

-2072745074

知道问题是什么吗?我提供了以下程序:

import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Main {

    static long aVeryBigSum(int n, long[] ar) {
        int sum  = 0;
        for (int i = 0; i < n; i++){
          System.out.println(sum);
          System.out.println(ar[i]);
          sum += ar[i];
          System.out.println(" ");
        }
        return sum;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        long[] ar = new long[n];
        for(int ar_i = 0; ar_i < n; ar_i++){
            ar[ar_i] = in.nextLong();
        }
        long result = aVeryBigSum(n, ar);
        System.out.println(result);
    }
}

共 (2) 个答案

  1. # 1 楼答案

    你的问题就在眼前

    int sum  = 0;
    

    应该是

    long sum = 0;
    

    当整数之和超过32位时,将触发整数溢出

  2. # 2 楼答案

    是的,同意疯狂物理学家的观点。你必须使用long sum = 0。但是为了完全正确,你有可能得到大于Long.MAX_VALUE的和。你可以使用例如BigDecimal

    static BigDecimal aVeryBigSum(int n, long[] ar) {
        BigDecimal sum = BigDecimal.ZERO;
    
        for (int i = 0; i < n; i++) {
            System.out.println(sum);
            System.out.println(ar[i]);
    
            sum = sum.add(new BigDecimal(ar[i]));
    
            System.out.println(" ");
        }
    
        return sum;
    }