练习是:
求出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;
}}
答案 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);
}
}