Я считаю, что в моем коде есть логическая математическая проблема, но я не могу понять, где она и почему

Это мой код, и когда я пытаюсь проверить разницу для ввода 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 к 100, я вижу свою проблему, спасибо

Serdyna 13.02.2023 17:42

Есть более 1 проблемы, см. мой ответ ниже

chptr-one 13.02.2023 17:49
Лучшая компания по разработке спортивных приложений
Лучшая компания по разработке спортивных приложений
Ищете лучшую компанию по разработке спортивных приложений? Этот список, несомненно, облегчит вашу работу!
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
Деревья поиска (Алгоритм4 Заметки к учебнику)
Деревья поиска (Алгоритм4 Заметки к учебнику)
(1) Двоичные деревья поиска: среднее lgN, наихудшее N для вставки и поиска.
2
2
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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;
}

Другие вопросы по теме