Как еще найти сумму всех целых нечетных чисел в диапазоне, указанном пользователе?

Написать программу, которая находит сумму всех целых нечетных чисел в диапазоне, указанном пользователе.

#include<iostream>:
using namespace std;
int main()

setlocale(LC_ALL, "rus");
int val1; // начало диапазона
int val2; // конец диапазона
int sum = 0; // переменная хранящая сумму
cout << "Укажите диапозон чисел:\nПервое число: " << endl;
cin >> val1;
cout << "Второе число: " << endl;
cin >> val2;
while (val1 <= val2)
{
    if (val1 % 2 != 0)
    {
        sum += val1;
    }
    val1++;
}

cout << "Результат: " << sum;

Как сделать так чтобы не каждый раз проверять четность числа, а проверить это перед циклом один раз, если четное, то прибавить единицу. А в цикле уже ничего не проверять, а просто прибавлять двойку к числу? Так можно оптимизировать код, но я не знаю как это сделать


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

Автор решения: Utsiye
#include<iostream>:
using namespace std;

setlocale(LC_ALL, "rus");
int val1; // начало диапозона
int val2; // конец диапозона
int sum = 0; // переменная хранящая сумму
cout << "Укажите диапозон чисел:\nПервое число: " << endl;
cin >> val1;
cout << "Второе число: " << endl;
cin >> val2;
if(val1%2!=0)
{
    val1++
}
while (val1 <= val2)
{
    if (val1 % 2 != 0)
    {
        sum += val1;
    }
    val1++;
}

cout << "Результат: " << sum;
→ Ссылка
Автор решения: Валерий
   #include<iostream>:
using namespace std;

void main()
{
    setlocale(LC_ALL, "rus");
    int val1; // начало диапозона
    int val2; // конец диапозона
    int sum = 0; // переменная хранящая сумму
    cout << "Укажите диапозон чисел:\nПервое число: " << endl;
    cin >> val1;
    cout << "Второе число: " << endl;
    cin >> val2;
    if (val1 % 2  == 0)
    {
        val1++;
    }
    while (val1 <= val2)
    {
            sum += val1;
            val1 += 2;
    }

    cout << "Результат: " << sum;
    
    
}

Я нашел правильный ответ

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

Если действительно нужно оптимизировать, то вспомним, как в 7 классе изучали арифметическую прогрессию. И циклов не надо.

val1 += (1 - val1 & 1);
val2 -= (1 - val2 & 1);
return (val2 - val1 + 2) * (val1 + val2) / 4;

Первые строчки меняют чётные числа на большее и меньшее нечётные.

→ Ссылка
Автор решения: Harry
int sum(int a, int b)
{
    a = (a-(a&1))/2;
    b = (b+(b&1))/2;
    return b*b - a*a;
}

Передавать в функцию значения так, чтоб a <= b...

→ Ссылка