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

时间:2016-03-19 10:47:27

标签: java

练习是:

  

求出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;
}}

1 个答案:

答案 0 :(得分:0)

处理测试用例的例程是完全错误的。阅读声明并遵循该声明。

此外,您还不需要添加和签名。

试试这个:

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);
    }
}