Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ramarren14
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
#1

Степень двойки - C++

27.08.2011, 19:09. Просмотров 987. Ответов 5
Метки нет (Все метки)

Изучаю программирование. Попытался решить известную задачу. Программа компилируется, но если ввести к примеру 8 она выдает "no". В чем я ошибся?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
 
using namespace std;
int main()
{
    int n,k;
    int flag=false;
    cout<<"enter a number ";
    cin>>n;
    while(n>=2)
    {
        k=n%2;
        if (k!=0) flag=false;break;
        flag=true;
        n=n/2;
    }
    if(flag) cout<<"yes";
    else cout<<"no";
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2011, 19:09     Степень двойки
Посмотрите здесь:

C++ Найти степень двойки
Максимальная степень двойки C++
степень двойки C++
Степень двойки в степени десятки C++
Модульное деление на степень двойки C++
Наибольшая целая степень двойки, не превосходящая заданного числа n C++
Сделать с помощью массива возведение двойки в произвольную степень. C++
C++ Степень двойки для отражения размера памяти
C++ Возведение двойки в большую степень (длинное число)
Точная степень двойки C++
C++ Возведение двойки в 40-вую и более степень
C++ Степень двойки и остаток от деления

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 19:16     Степень двойки #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
 
using namespace std;
int main()
{
        int n,k;
        int flag=false;
        cout<<"enter a number ";
        cin>>n;
        flag=true;
        while(n>=2)
        {
                k=n%2;
                if (k!=0)
                {
                   flag=false;
                   break;
                }
                n=n/2;
        }
        if(flag) cout<<"yes";
        else cout<<"no";
    return 0;
}
silent_1991
Эксперт С++
4956 / 3032 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 19:18     Степень двойки #3
13 строка:
C++
1
if (k!=0) {flag=false;break;}
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.08.2011, 19:34     Степень двойки #4
C++
1
2
3
4
5
6
#include <iostream>
int main(){
    int n;
    std::cin >> n;
    std::cout << (n & (n - 1) ? "No\n" : "Yes\n" );
}
nameless
Эксперт C++
314 / 296 / 14
Регистрация: 16.06.2009
Сообщений: 486
27.08.2011, 19:35     Степень двойки #5
ramarren14, можно проще:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
inline bool IsTwoDegree(int number) {
   return (number != 0) ? (!(number & (number - 1))) : false;
}
 
int main() {
   std::cout << (IsTwoDegree(0) ? "Yes" : "No") << std::endl;
 
   return 0;
}
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 22:30     Степень двойки #6
diagon, nameless, просто товарищу надо было указать на ошибку в его коде, но за напоминание этого красивого метода спасибо.
Yandex
Объявления
27.08.2011, 22:30     Степень двойки
Ответ Создать тему
Опции темы

Текущее время: 22:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru