Это мой код, и когда я пытаюсь проверить разницу для ввода 100, я получаю 24501794 вместо 25164150, вот мой код:
class DifferenceOfSquaresCalculator {
int computeSquareOfSumTo(int input) {
int sumOfNatural = 0;
int sumOfNaturalSquared = 0;
for (int i = 1; i < input; i++){
sumOfNatural+=i;
}
sumOfNaturalSquared = (int) Math.pow(sumOfNatural,2);
return sumOfNaturalSquared;
}
int computeSumOfSquaresTo(int input) {
int sumOfSquaredNaturals = 0;
for (int i = 1; i < input; i++){
i = (int) Math.pow(i, 2);
sumOfSquaredNaturals+=i;
}
return sumOfSquaredNaturals;
}
int computeDifferenceOfSquares(int input) {
int difference = computeSquareOfSumTo(input) - computeSumOfSquaresTo(input);
return difference;
}
}
Есть более 1 проблемы, см. мой ответ ниже
У вас есть две проблемы с этим кодом.
Сначала вы считаете серию, исключая последнее число:
For (int i = 1; i < input; i++) должно быть for (int i = 1; i <= input; i++)
Во-вторых, в вашем computeSumOfSquaresTo вы меняете переменную цикла i внутри цикла. Попробуйте это вместо этого:
int computeSumOfSquaresTo(int input) {
int sumOfSquaredNaturals = 0;
for (int i = 1; i <= input; i++) {
sumOfSquaredNaturals += i * i;
}
return sumOfSquaredNaturals;
}
Вы также можете использовать более простой подход, используя StreamAPI:
int computeSquareOfSum(int input) {
int sum = IntStream.rangeClosed(1, input).sum();
return sum * sum;
}
int computeSumOfSquares(int input) {
return IntStream.rangeClosed(1, input).map(i -> i*i).sum();
}
Или, с тем же результатом, вы можете использовать только одну функцию:
int computeDifferenceOfSquares(int input) {
int sum = IntStream.rangeClosed(1, input).sum();
int sumOfSquares = IntStream.rangeClosed(1, input).map(i -> i * i).sum();
return sum * sum - sumOfSquares;
}
1 к 100, я вижу свою проблему, спасибо