N = 2 ^ x, напишите true, если true. Почему это не так?

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

Учитывая вход:

N
where N is an integer.

вернуть:

True  if N = 2^x, where x is an integer.

Я пытался сделать это, но это не работает, как я хочу.

using namespace std;
int main()
{
float a,b,c;
cin>>a;
c=log10(a)/log10(2.0);
b=pow(2,c);
if(b==a)
{
cout<<"TRUE"<<endl;}
else
cout<<"FALSE"<<endl;{
}
}

Помоги мне, пожалуйста. Спасибо.

0

Решение

Как Что каждый компьютерщик должен знать об арифметике с плавающей точкой объясняет, что числа с плавающей запятой в компьютерных программах делают вид, что они могут представлять любое действительное число, но на самом деле имеют только 32 или 64 бита, поэтому вы округлились до ближайшего представления. Четные числа, которые выглядят простыми, например, 0,1, имеют бесконечное представление в двоичном коде и поэтому округляются. Функции, которые работают с числами с плавающей запятой, такие как cos а также pow по своей природе будет иногда давать вам «неправильный» результат просто потому, что «правильный» результат не является представимой плавающей точкой.

Иногда решение является сложным. Однако в этом случае решение довольно простое — убедитесь, что разница двух чисел меньше, чем эпсилон, где эпсилон — достаточно малое число, чтобы дать вам необходимую точность. например

float epsilon = 0.0001;
if(abs(b-a) < epsilon)

Кроме того, всякий раз, когда вам нужна точность больше, чем скорость и размер, используйте double в предпочтении float, Это вдвое больше, и поэтому многие значимые места более точны.

5

Другие решения

Объявите значения a, b, c как double, если вы хотите использовать это
с = log10 (а) / log10 (2.0);

Объявите значения a, b, c как float, если вы хотите использовать это
с = log10 (а) / log10 (2.0f);

Я выполнил программу с обоими этими изменениями, один за другим. Он работает для обоих
проверьте синтаксис и пример Вот

0

Я думаю, что код должен читать (учитывая описание проблемы.) Вы хотите знать, является ли N степенью 2?

Изменить на код

#include <iostream>

int main()
{
unsigned int N;
std::cout << "Input a number ";
std::cin >> N;
unsigned int two_to_the_power_of_bit = 0;
do {
std::cout << "Working on " <<
two_to_the_power_of_bit << std::endl;
if (two_to_the_power_of_bit == N) {
std::cout << "TRUE" << std::endl;
return 0;
}

if (two_to_the_power_of_bit > N) {
std::cout << "FALSE" << std::endl;
return 1;
}

if (two_to_the_power_of_bit == 0) {
two_to_the_power_of_bit = 1;
} else {
two_to_the_power_of_bit <<= 1;
}
} while(two_to_the_power_of_bit);
}

Если я неправильно понял вашу проблему, не могли бы вы уточнить?

Output:
Input a number 3
Working on 0
Working on 1
Working on 2
Working on 4
FALSE
mehoggan@mehoggan-Precision-WorkStation-T5500:~/Devel/test$ ./a.out
Input a number 4
Working on 0
Working on 1
Working on 2
Working on 4
TRUE
mehoggan@mehoggan-Precision-WorkStation-T5500:~/Devel/test$ ./a.out 5
Input a number 5
Working on 0
Working on 1
Working on 2
Working on 4
Working on 8
FALSE
mehoggan@mehoggan-Precision-WorkStation-T5500:~/Devel/test$
0
По вопросам рекламы [email protected]