2016-03-19 149 views
-1

的运动是:为什么我的代码有时无法按预期工作?

查找下面N.

我用的BigInteger这样我就可以处理大数字的3或5的所有倍数的总和。我通过了第一个测试用例,但通过提交,我只通过了六个测试用例中的一个。所以我的代码存在问题,但我不知道我在做什么错误。有人能帮我吗?谢谢。

这是我有:

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; 
}} 
+0

你的意思[问题1 - 项目欧拉(https://projecteuler.net/problem=1)?您不需要总结每个测试用例的所有答案。 – MikeCAT

+0

谢谢你的回应。是的,我的意思是问题1.在我的代码中,我没有总结所有的测试用例,或者我做错了什么? – user3505506

+0

如果(%)N%3 == 0,N%5 == 0,则需要查找模数函数。 – VeenarM

回答

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

发布有关'ProjectEuler'的答案是否是一个好主意? –

+0

非常感谢:)。有用。你是我的英雄。你能给我更多的信息,我做错了吗? – user3505506

+0

我明白我做错了什么。我认为每次有3个输入,显然输入是不同的。 – user3505506

相关问题