Консультация № 110348
21.11.2007, 06:21
0.00 руб.
0 3 3
Подскажите, как число четное или не четное. Я полагала так:
if ((sqrt(N)%2)==0) k=floor(sqrt(N)); else k=ceil(sqrt(N));
Но компилятор ругается на выражение sqrt(N)%2.
[C++ Error] Unit1.cpp(33): E2060 Illegal use of floating point
Заранее спасибо!

Обсуждение

Неизвестный
21.11.2007, 06:34
общий
это ответ
Здравствуйте, Mart!
Правильно ругаеться, операция % (остаток от деления) определена только для целых чисел (да и в математике на сколько я помню признак четности относиться только к целым числам).
Так что если результат извлечения квадратного корня - целой число, то можно написать так

if( ((int)sqrt(N))%2 )==0)

Это же выражение будет определять четность целой части квадратного корня.
Неизвестный
21.11.2007, 09:17
общий
это ответ
Здравствуйте, Mart!

А определять чётность целого числа лучше так:

#include <stdio.h>

//...
int value = 5;// Например
unsigned char parityFlag;// Флаг чётности
parityFlag = value & 0x0001;// Если младший бит равет 1 (т.е. будет остаток от деления на 2), то и parityFlag станет равным 1
if (parityFlag) printf("Число нечётное"); else printf("Число чётное");
//...
Неизвестный
21.11.2007, 10:25
общий
это ответ
Здравствуйте, Mart!
Вообще-то лучше данную операцию сделать немного по другому. Например как в приложении. Такая конструкция позволяет вычислять корень лишь один раз, да и компилятор ругаться не будет...



Приложение:
double sqrt_n = sqrt(N);k = (!(static_cast<int>(sqrt_n)%2)) ? floor(sqrt_n) : ceil(sqrt_n);
Форма ответа