Проблема с подсчетом двойной суммы

введите сюда описание изображения

#include <iostream>

using namespace std;

int main() {
   int n;
   double sm = 0;
   cin >> n;
   for (int i = 0; i <= n; ++i) {
      for (int j = 0; j <= n; ++j) {
         sm += i*i - 2 * j;
      }
   }
   cout << sm;
}

Ответы (1 шт):

Автор решения: Harry

Только заметил...

Ну кто же так делает?!!

double sm = 0;

Это же типично целочисленное значение! Введите 1000, и посмотрите, что вам выведет программа: 3.33165e+11

Замените на long long, вот этот код благополучно работает:

int main()
{
   long long n;
   long long sm = 0;
   cin >> n;
   for (long long i = 0; i <= n; ++i) {
      for (long long j = 0; j <= n; ++j) {
         sm += i*i - 2 * j;
      }
   }
   cout << sm;
}

Но самое правильное :) решение (работающее до 55000 с небольшим) — вот:

int main()
{
    long long n;
    cin >> n;
    cout << (1+n)*(1+n)*(2*n-5)*n/6;
}
→ Ссылка