gpt4 book ai didi

Java:无法处理大量数据(Euler 项目:#1)

转载 作者:行者123 更新时间:2023-12-01 13:21:07 25 4
gpt4 key购买 nike

考虑以下代码:

public static void main(String[] args){
int target = 99999;
revised(target);

long total = 0;
for(int x = 0; x <= target; x++){
if(x % 3 == 0 || x % 5 == 0)
total+=x;
}
System.out.println("Method B: " + total);
}

private static double findSum(int target, int divisor){
int upperBound = target/divisor;
return divisor*(upperBound+1)*upperBound*.5;
}

private static void revised(int target){
double sumOne = findSum(target, 3);
double sumTwo = findSum(target, 5);
double sumThree = findSum(target, 15);
System.out.printf("Method A: %.0f \n", sumOne + sumTwo - sumThree);
}

欧拉项目 #1 问题:打印可被 3 或 5 整除的整数之和。

当目标为 9、99、999、9999 时,以下代码正确;但是,当目标变量设置为 99999 时,会失败。修改后的函数生成的答案不会产生与主函数中的暴力方法相同的结果。我不认为这是由于 double 类型的溢出造成的。

有人可以解释一下为什么修改后的函数在给定较大数字时会失败,但在给定较小数字时会产生相同的结果(与暴力方法相同)?

最佳答案

只要在Double处使用相同的DataType

public static void main(String[] args){
int target = 99999;
revised(target);
}

private static double findSum(double target, double divisor){
double upperBound = target/divisor;
System.out.println("|"+upperBound+"|"+target+"|"+divisor);
return divisor*(upperBound+1)*upperBound*.5;
}

private static void revised(double target){
double sumOne = findSum(target, 3);
double sumTwo = findSum(target, 5);
double sumThree = findSum(target, 15);
System.out.printf("%.0f \n", sumOne + sumTwo - sumThree);
System.out.println("|"+sumOne+"|"+sumTwo+"|"+sumThree);
}

当执行数据类型转换时会出现此问题

关于Java:无法处理大量数据(Euler 项目:#1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22023975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com