Помогите улучшить решение задачи

Есть задача

Дана последовательность положительных целых чисел, завершающаяся числом 0. Определите сумму элементов этой последовательности.

При решении этой задачи нельзя использовать массивы.
Общее количество чисел во входных данных не превосходит 2*10^6.

И вот такой код

#include <iostream>
using namespace std;
 
int main()
{
  int a, b = 0;
  while(cin){
    cin >> a;
    b += a;
    if(a == 0){
      break;
    }
  }
cout << b;
  
}

На одном из тестов переполняется память(Memory limit). Как я могу это исправить?


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

Автор решения: AR Hovsepyan

Когда у вас есть до двух миллионов положительных чисел, то сумма этих элементов вполне может не вмещаться в int, тем более, что этот тип тут вообще неуместен. Так как все числа положительные, уместен без знаковый тип(например unsigned int), а их сумма должна вмещаться в тип объекта, хранящий эту сумму, и скорее тут уместен unsigned long long. Так что ваш код с улучшениями может выглядеть:

unsigned n;
unsigned long long sum{};
while (std::cin >> n && n)
    sum += n;
std::cout << sum;
→ Ссылка