2016-03-19 185 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

相關問題