Другие языки программирования и технологии

Помогите пожалуйста разобраться с циклом while c++

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

int a,b,summ=0;
cout<<"Введите начало диапазона: ";
cin>>a;
cout<<"Введите конец диапазона: ";
cin>>b;
while(a<=b)
{
if(a%1==0)
{
summ=summ+a;
a++;
}
}
cout<<"Сумма нечетных чисел: "<<summ<< endl;

я так понимаю если "а" будет равно 5ти, а "b" = 10 то ответ должен быть 5+7+9 = 21, а мое творение показывает 45
никак не могу сообразить как это сделать с циклом while ((
#include <iostream>
#include <cassert>
#include <conio.h>

using namespace std;

enum CHOICE { ESC = 27, CLEAR = 48, NATURAL, EVEN, ODD };

typedef unsigned long long ullong;
typedef unsigned long ulong;

ullong natural_numbers(ulong);
ullong natural_numbers(ulong, ulong);
ullong even_numbers(ulong);
ullong even_numbers(ulong, ulong);
ullong odd_numbers(ulong);
ullong odd_numbers(ulong, ulong);
bool is_natural_number(ulong);

int main() {
setlocale(LC_CTYPE, "Russian");
bool run = true;
while (run) {
cout << "\n Введите начало дапазона: ";
ulong start;
cin >> start;
cout << " Введите конец дапазона: ";
ulong last;
cin >> last;
cout << "\n Чтобы вычислить сумму натурального ряда, нажмите 1\n"
<< " Чтобы вычислить сумму чётного ряда, нажмите 2\n"
<< " Чтобы вычислить сумму нечётного ряда, нажмите 3\n"
<< " Чтобы удалить предыдущие результаты, нажмите 0\n"
<< " Для выхода из программы, нажмите ESC\n\t ";
ullong sum = 0;
int choice = INT_MAX;
if (is_natural_number(start) && is_natural_number(last)) choice = _getch();
switch (choice) {
case CLEAR: system("cls"); break;
case ESC: run = false; break;
case NATURAL: sum = natural_numbers(start, last); break;
case EVEN: sum = even_numbers(start, last); break;
case ODD: sum = odd_numbers(start, last); break;
default: cout << "\n Хьюстон, у нас проблемы с данными! \n\a\a\a";
}
if (sum) cout << "\n\t Сумма ряда = " << sum << endl;
cin.sync();
}
}

ullong natural_numbers(ulong last) {
if (!last) return last;
ullong n = last;
return n * (n + 1) >> 1;
}

ullong natural_numbers(ulong start, ulong last) {
if (start > last) swap(start, last);
assert(start != 0);
return natural_numbers(last) - natural_numbers(start - 1);
}

ullong even_numbers(ulong last) {
if (!last) return last;
ullong n = last >> 1;
return n * (n + 1);
}

ullong even_numbers(ulong start, ulong last) {
if (start > last) swap(start, last);
assert(start != 0);
return even_numbers(last) - even_numbers(start - 1);
}

ullong odd_numbers(ulong last) {
if (!last) return last;
ullong n = (last >> 1) + (last & 1);
return n * n;
}

ullong odd_numbers(ulong start, ulong last) {
if (start > last) swap(start, last);
assert(start != 0);
return odd_numbers(last) - odd_numbers(start - 1);
}

bool is_natural_number(ulong n) {
return n? true : false;
}
Дмитрий Рогов
Дмитрий Рогов
76 712
Лучший ответ
Не if(a%1==0) а if(a%2==1)
Вадим Смагин если меняю так как ты написал, то программа вообще не выдает ответ
выбирай вариант if

if(a%2!=0)
if(a%2==1)
if(a%2)
if(a&1)
..
.......... ..........
90 416
Вадим Смагин если я меняю условия if то у меня программа не выдает вообще ответа, после введенных чисел диапазона просто молчит, может не только в if дело ?
с if сильно намудрил. Возьми проще
if (a%2<>0)
Andrei Gulak
Andrei Gulak
250
Вадим Смагин так не работает, ставлю <> сразу ошибка