Следующее чётное и нечётное целые числа
Для целочисленного значения 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 просмотров]