Получается не верный ответ, что я сделал не так?

#include<iostream>
using namespace std;

/*
*       Найти сумму всех кратных 3 или 5 ниже 1000.
*/
void main()
{

    int a = 0;
    int b = 0;
    for (int i = 1; i < 1000; i++)
    {

        if (i%3==0)
        {
            a = a + i;

        }
        if (i % 5 == 0)
        {
            b = b + i;
        }

    }

    cout << a + b << endl;
}

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

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

var sum = 0;
for (var i = 1; i < 1000; i++) {
  if (i % 3 == 0 || i % 5 == 0)
    sum += i;
}
console.log(sum);

var sum = 0;
for (var i = 3; i < 1000; i += 3) {
    sum += i;
}
for (var i = 5; i < 1000; i += 5) {
    sum += i;
}
for (var i = 15; i < 1000; i += 15) {
    sum -= i;
}
console.log(sum);

→ Ссылка
Автор решения: AR Hovsepyan

Если число i не делится на 5, то i * 3 не будет делиться на 5. Исходя из этого, можно написать следующее:

int sum = 0;        
for (int i = 1; i <= 333; ++i) {
    if (i % 5)
        sum += i * 3;
    if(i < 200)
        sum += i * 5;        
}
std::cout << sum;

Таким образом сокращается цикл в три раза:

→ Ссылка
Автор решения: user7860670

Циклы не нужны, так как тут считается сумма арифметической прогрессии. Чтобы не учитывать числа, кратные обоим данным числам, по два раза, из итоговой суммы следует вычесть сумму чисел, кратных их произведению.

#include <iostream>

static auto asum(auto const step, auto const limit)
{
    auto const n{(limit - 1) / step};
    return (step * n * (n + 1)) / 2;
}

int main()
{
    auto const limit{1000};
    auto const a{3};
    auto const b{5};
    auto const sum{asum(a, limit) + asum(b, limit) - asum(a * b, limit)};
    ::std::cout << sum << ::std::endl;
    return 0;
}

online compiler

→ Ссылка