Java 为什么我的代码有时不能按预期工作?

Java 为什么我的代码有时不能按预期工作?,java,Java,这项工作是: 求N以下所有3或5的倍数之和 我使用了BigInteger,所以我可以处理大数字。我通过了第一个测试用例,但在提交之前,我只通过了六个测试用例中的一个。所以我的代码有问题,但我不知道我做错了什么。有人能帮我吗?多谢各位 这就是我得到的: public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Solution solution = new Solutio

这项工作是:

求N以下所有3或5的倍数之和

我使用了BigInteger,所以我可以处理大数字。我通过了第一个测试用例,但在提交之前,我只通过了六个测试用例中的一个。所以我的代码有问题,但我不知道我做错了什么。有人能帮我吗?多谢各位

这就是我得到的:

public static void main(String[] args) {
     Scanner scanner = new Scanner(System.in);
     Solution solution = new Solution();
     for (int i = 0; i < 3; i++){
        long input = scanner.nextLong();
        BigInteger sums = new BigInteger("0");
        sums = sums.add(solution.calculateSum(input));              
        if (sums.signum() == 1){
            System.out.println(sums);
        }
     }
}

private BigInteger calculateSum(long input){
   input--;
   long totalElements = 0;
   BigInteger sums = new BigInteger("0");
   if (input >= 3){
       totalElements = input/3;
       sums = sums.add(BigInteger.valueOf((totalElements * (3 + totalElements *3))/2));
   }
   if (input >= 5){
       totalElements = input/5;
       sums = sums.add(BigInteger.valueOf((totalElements * (5 + totalElements *5))/2));
   }
   if (input >= 15){
       totalElements = input/15;
       sums = sums.subtract(BigInteger.valueOf((totalElements * (15 + totalElements *15))/2));
   }
   return sums;
}}
publicstaticvoidmain(字符串[]args){
扫描仪=新的扫描仪(System.in);
溶液=新溶液();
对于(int i=0;i<3;i++){
长输入=scanner.nextLong();
BigInteger总和=新的BigInteger(“0”);
sums=sums.add(solution.calculateSum(input));
if(sums.signum()==1){
系统输出打印项次(总和);
}
}
}
专用BigInteger calculateSum(长输入){
输入--;
长元素总数=0;
BigInteger总和=新的BigInteger(“0”);
如果(输入>=3){
totalElements=输入/3;
sums=sums.add(BigInteger.valueOf((totalElements*(3+totalElements*3))/2);
}
如果(输入>=5){
totalElements=输入/5;
sums=sums.add(BigInteger.valueOf((totalElements*(5+totalElements*5))/2);
}
如果(输入>=15){
总元素=输入/15;
sums=sums.subtract(BigInteger.valueOf((totalElements*(15+totalElements*15))/2);
}
回报金额;
}}

您处理测试用例的例程完全错误。读一读声明,然后跟着读

此外,您不需要添加和签名检查

试试这个:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    Solution solution = new Solution();
    int size = scanner.nextInt();
    for (int i = 0; i < size; i++){
        long input = scanner.nextLong();
        BigInteger sums = solution.calculateSum(input);
        System.out.println(sums);
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪=新的扫描仪(System.in);
溶液=新溶液();
int size=scanner.nextInt();
对于(int i=0;i
你的意思是什么?您不需要对每个测试用例的所有答案进行汇总。谢谢您的回复。是的,我是说问题1。在我的代码中,我没有对所有测试用例求和,或者我做错了什么吗?如果(%)N%3==0,N%5==0,您需要查找模函数。@user3505506是的,您没有对单独的测试用例求和。我误解了。你是对的,但我想要恒定的时间。所以我使用算术级数公式。发布关于
ProjectEuler
的答案是不是一个好主意?非常感谢:)。它起作用了。你是我的英雄。你能告诉我更多我做错了什么吗?我知道我做错了什么。我认为每次有3个输入,显然输入是不同的。@YassinHajaj我认为没有ProjectEuler标记。@YassinHajaj是的,你是对的,但我的问题是我不知道如何在我的代码中正确实现来自Hackerrank的输入。我解决这个问题的算法是正确的。我想我已经自己解决了这个问题。后来我的问题是面向Java的,而不是解决问题。