Вы никогда не инициализируете sum
, поэтому нет гарантии, что значение начинается с 0. На самом деле, его начальное значение по существу не определено.Вы должны просто добавить строку sum = 0;
перед циклом for.
#include <iostream>
using namespace std;
int main(){
int input, sum;
sum = 0;
cin >> input;
for(int i = 1; i <= input; i++){
sum += i*i;
}
cout << sum << endl;
}
"Кстати, когда использование функций становится более эффективным, чем запись чего-либо в основном коде"
Это не такОбязательно более эффективный, но для больших проектов легче читать код, когда общие функциональные возможности сгруппированы в многократно используемые функции.Как правило, если вы пишете один и тот же код / алгоритм более одного раза, вы должны написать функцию для этого кода / алгоритма.
ПРИМЕЧАНИЕ - Как указывалось другими, существует формула для расчета суммы квадратов без цикла.
sum = n * (n + 1) * (2 * n + 1) / 6
Это так называемое решение порядка 1 или O(1)
, поскольку для достижения желаемых результатов можно выполнить одну атомарную операцию.С другой стороны, решение цикла считается порядка n , или O(n)
, так как n
итерации цикла должны быть выполнены для достижения результатов процедуры.Решение O(1)
считается оптимальным.Если вы используете большие значения в качестве входных данных, вы поймете, почему.Однако, если вы новичок в программировании, ваши учителя не будут ожидать, что вы узнаете много об анализе алгоритмов, и оригинальное решение, приведенное выше, должно подойти.