БлогNot. Следующее чётное и нечётное целые числа

Следующее чётное и нечётное целые числа

Для целочисленного значения N найти следующее чётное и следующее нечётное число.

Если число уже чётное, например, 16, ответом будет 18, а для -98 ответ = -96. Те же правила для нечётных значений.

Консольная программа проверена в Visual Studio 2015 на тестовом массиве A.

Обеим функциям потребовалось по 3 операции над исходным числом, а за 2 кто-нибудь может? :)

#include <iostream>
using namespace std;

int nextOddNumber(int a) { //следующее нечетное целое
 return a + (a & 1) ^ 1;
}

int nextEvenNumber(int a) { //следующее четное целое
 return (((a + 2) >> 1) << 1);
}

int main() {
 int A[] = { 5, 2, 16, 237, -99, -98, 0};
 int N = sizeof(A) / sizeof(A[0]);
 for (int i=0; i<N; i++)
  cout << "For " << A[i] << ": odd=" << nextOddNumber(A[i]) << 
   ", even=" << nextEvenNumber(A[i]) << endl;
 cin.get(); return 0;
}

Вот что вывела эта программа:

For 5: odd=7, even=6
For 2: odd=3, even=4
For 16: odd=17, even=18
For 237: odd=239, even=238
For -99: odd=-97, even=-98
For -98: odd=-97, even=-96
For 0: odd=1, even=2

Ещё хитрые выражения для (само)проверки:

  • округлить до ближайшего целого: a += (a & 1)
  • округлить вниз до чётного: a & ~1
  • округлить вверх до чётного: (a + 1) & ~1

07.10.2019, 18:01 [1739 просмотров]


теги: c++ числа алгоритм

К этой статье пока нет комментариев, Ваш будет первым