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

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

Восстановить пароль Регистрация
 
ramarren14
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
27.08.2011, 19:09     Степень двойки #1
Изучаю программирование. Попытался решить известную задачу. Программа компилируется, но если ввести к примеру 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 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
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
27.08.2011, 19:18     Степень двойки #3
13 строка:
C++
1
if (k!=0) {flag=false;break;}
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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++
 Аватар для nameless
289 / 288 / 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++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 22:30     Степень двойки #6
diagon, nameless, просто товарищу надо было указать на ошибку в его коде, но за напоминание этого красивого метода спасибо.
Yandex
Объявления
27.08.2011, 22:30     Степень двойки
Ответ Создать тему
Опции темы

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