此代码计算函数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;
}
答案 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来存储总数。