无法计算大量迭代,例如1,000,000,000

时间:2018-07-12 17:04:29

标签: java math overflow

此代码计算函数f(x)= -1 + 2 + -3 + 4 + ... +((-1)^ n)* n 但是,当输入(n)太大(例如1000000000)时,java不会显示输出。

我该怎么解决这个问题?

import java.util.Scanner;

public class Calculating_function {
    public static void main(String[] args) {



        Scanner input_taker = new Scanner(System.in);

        String n_string = input_taker.nextLine();
        long n = Long.parseLong(n_string);



        System.out.println(fonk(n));


    }

    public static long fonk(long n) {
        long total = 0;
        for(long i = 1; i <= n; i++) {

            total += (long)Math.pow(-1, i) * i; 
        }
        return total;
    }

1 个答案:

答案 0 :(得分:2)

随着i的值增加,指数计算Math.pow(-1, i)的计算将花费越来越长的时间。

当您使用Math.pow(-1, i)来简单交换符号时,可以将其优化为Math.pow(-1, i%2)。更好的是,将乘数映射到值1和-1,并使用i%2作为键。

另外,由于总数的上限为500,000,000,000,000,000,因此您有冒溢的风险,因此请使用BigInteger来存储总数。