Как мне добавить элементы этого вектора вместе? - PullRequest
0 голосов
/ 27 сентября 2018

Цель моего кода - сложить элементы вектора в одно целое число.Это для задачи № 1 в Project Euler:

https://projecteuler.net/problem=1

Вот мой код:

int main()
{
  int max_count = 1000; //The upper bound

  //Loop for filling vector
  for (int i = 1; i <= max_count; ++i){
      int counter[max_count];

      if (counter[i] % 3 == 0|| counter[i] % 5 == 0){
          vector <int> start_point = {};
          start_point.push_back (counter[i]);
            for (auto& n : start_point){
                int sum_of_elems = 0;
                sum_of_elems += n;
                cout << sum_of_elems;
            }   

      }
  }
  return 0;
}

В настоящее время мой код выводит следующее, и я не могувыяснить, почему.

32766143547943202305202750000-4646761603276630-76434810000-76434582500-464677056327662448-4646770403276632766-46467703232766327666032766230586999-970904238-95777621723084852023084852032766-970904244-46467688032766230624075-970911300230826120-1916976912327663276623063434032766230634681-957776214230826120140084992032766-970911280327660003276603276630-4646761603276623058081332766-464676440327663276632766230831712230745153065793306031200003276623074515300-191647711200023084852023074515365793360036000002308224802307451533657937207200-46467616032766000023083171232766230595552230831712032766327660-46467619232766230577342230822480230829920000-46467616032766230822480230829960-46467264032766230540223001920409600-46467247232766327661920409600-46467220832766000000000011072962560230556921230818160-4646738403276619204096000000230510592-1572142422000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001920169263100000170147416279176918919693827240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Удаляя векторы и другие ненужные переменные, код можно упростить до:

#include <iostream>

int main()
{
  int max_count = 1000; //The upper bound
  int sumOfMultiples = 0;

  for (int i = 1; i < max_count; ++i)
      if (i % 3 == 0 || i % 5 == 0)
        sumOfMultiples = sumOfMultiples + i;

   std::cout << "Sum of  Multiples of 3 and 5 below 1000 is: " << sumOfMultiples << "\n";      

  return 0;
}

Вывод:

Sum of  Multiples of 3 and 5 below 1000 is: 233168
0 голосов
/ 27 сентября 2018

Вы переинициализируете переменную sum в каждом цикле, так что в итоге вы просто печатаете отдельные значения.Вы также смешиваете цикл и суммирование, что усложняет ваш код;либо полностью пропустите vector (просто запишите цикл суммирования), либо заполните его полностью, а затем сложите его.,Вы объявляете counter без инициализации, а затем читаете из неинициализированной памяти для заполнения start_point.

Дело в том, что большинство ваших переменных нужно объявлять вне циклов (чтобы они не были повторно инициализированы с нуля)в каждый цикл) ваш вывод должен быть после циклов, а counter нужны реальные данные, чтобы вы не вызывали неопределенное поведение.

...