Java编写从1到20的阶乘之和的结果出现了问题

在编写该程序的时候,我发现只要改变了int或者long型,本题的答案就不一样了。但是我也不知道问题在哪里?

img

我把int改成long型,但是答案还是不对, 希望可以指出我的代码的问题,谢谢!!

int 溢出了;这类问题可以考虑用dp

long[] arr = new long[21];
         arr[1] = 1;
         long sum = 1;
         for(int i=2;i<=20;i++){
             arr[i] = arr[i-1] * i;
             sum += arr[i];
         }
        System.out.println(Arrays.toString(arr));
        System.out.println(sum);

你用int类型去接收结果会超过int类型的最大值的,必须要有long或以上的大数据类型

题目中 sum和n都需要修改为long