首页 文章

通过长整数发出增量sum = 0在Java中传递9位数

提问于
浏览
0

该程序首先要求用户给出赋值给变量 n 的值,然后将提示用户提交n次数的长数字 . 然后将数字存储到初始化数组( ar )中 . 我试图创建 aVeryBigSum 的函数是遍历数组中的数字,通过数组中的数字递增 sum=0 以提供总和(Java) .

但是,由于某种原因,该程序有效,除非我使用两个连续数字超过9位数 .

例如:

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

输出:

22222222

aVeryBigSum(2,[1111111111,1111111111]) 在数组输出中有2个和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

    你的问题就在于此

    int sum  = 0;
    

    它应该读

    long sum = 0;
    

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

  • 0

    是的,同意Mad Physicist . 你必须使用 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;
    }
    

相关问题