Сумма чисел от 1 до n. C++

630
09 февраля 2017, 00:44

Здесь

Вот мой код:

#include <iostream>
using namespace std;
int main()
{
    int n, sum =0;
    cin >> n;
    if (n<=-1)
        for(int i=1; i>=n; i--) sum+= i; // сума отрицательных
    else
        sum = (1+n) * n / 2; // по формуле
    cout << sum;
}

Но сдано только на 57%. В чем может быть подвох?

Answer 1

Ваши главные ошибки - во-первых, вы не учитываете, что сумма может быть на все 64 бита... Соответственно, суммировать циклом - это кошмарное решение.

Нельзя даже множить n*(n+1)/2 - потому что можно получить переполнение!

Нужно, например, вот так:

#include <iostream>
#include <iomanip>
using namespace std;

int main(int argc, const char * argv[])
{
    long long n;
    cin >> n;
    if (n > 0)
    {
        if (n%2)
            n = ((n+1) >> 1)*n;
        else
            n = (n >> 1)*(n+1);
    }
    else if (n==0) n = 1;
    else
    {
        n = -n;
        if (n%2)
            n = ((n+1) >> 1)*n;
        else
            n = (n >> 1)*(n+1);
        n = 1 - n;
    }
    cout << n << endl;
}
READ ALSO
Найти стороны треугольника [требует правки]

Найти стороны треугольника [требует правки]

Даётся n и массив с размером nВсе числа в размешку

337
Как отдебажить большой sql-запрос?

Как отдебажить большой sql-запрос?

Есть большой sql-запрос (почти на 1500 строк), доставшийся по наследству, но не функционирующий правильноНужно отдебажить

350
Ubuntu, MySQL - проблемы с кодировкой

Ubuntu, MySQL - проблемы с кодировкой

Поставил на Ubuntu сервер MySQL, создал БД, при создании указал кодировку utf-8:

387
Каким образом сделать выборку слов из базы по первой букве

Каким образом сделать выборку слов из базы по первой букве

ЗдравствуйтеКаким образом можно сделать выборку из базы MySQL слов, которые начинаются на определенную букву?

385