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

Цикл while - C++

Восстановить пароль Регистрация
 
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
20.01.2011, 19:10     Цикл while #1
Написал код, если Х изначально взять двойку, то программа пишет, что она не является степенью двойки. Как это иправить ? Она же вроде как является степенью =)

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>
 
int main(){
        
        setlocale(LC_ALL,"Russian");
        
        double x; 
        
        std::cout << "Введите число x: ";
        std::cin >> x;
 
        while(x > 2){
            x /= 2;
            if(x == 2){
                std::cout << "\n\n\tЧисло является степенью двойки.\n\n\n";
                return 0;
            }
        }
                
        std::cout << "\n\n\tЧисло не является степенью двойки.\n\n\n";
         
        return 0;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2011, 19:10     Цикл while
Посмотрите здесь:

Цикл с++ C++
Цикл for C++
Цикл do...while(); C++
C++ Цикл
C++ Цикл for
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.01.2011, 19:11     Цикл while #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>
 
int main(){
        
        setlocale(LC_ALL,"Russian");
        
        double x; 
        
        std::cout << "Введите число x: ";
        std::cin >> x;
 
        while(x >= 2){
           if(x == 2){
                std::cout << "\n\n\tЧисло является степенью двойки.\n\n\n";
                return 0;
            }
            x /= 2;
        }
                
        std::cout << "\n\n\tЧисло не является степенью двойки.\n\n\n";
         
        return 0;
 
}
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
20.01.2011, 19:11     Цикл while #3
Цитата Сообщение от SynaptyC Посмотреть сообщение
while(x > 2){
попробуйте x >= 2, кстати единица это тоже степень двойки, так сказать частный случай.
SynaptyC
0 / 0 / 0
Регистрация: 04.10.2010
Сообщений: 31
20.01.2011, 19:15  [ТС]     Цикл while #4
Спасибо, всё работает =)
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
20.01.2011, 19:21     Цикл while #5
А вот так единица учитывается, да и работать побыстрее деления будет
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int foo(unsigned int n) {
    int i = 0;
    while(i < sizeof(n) * 8) {
        if(1 << i++ == n)
            return 1;
    }
    return 0;
}
 
int main()
{
    int n = 256;
    printf("Число %d %sявляется степенью двойки\n", n, foo(n) ? "" : "не ");
    return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.01.2011, 19:38     Цикл while #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
 
int main()
{
    const int n=64;
    std::vector<unsigned long long> vec;
    int one=1;
    vec.push_back(one);
    std::generate_n(std::back_inserter(vec), n, [&one]() {return one<<=1;});
    unsigned long long hel=0;
    std::cout<<"Enter number: ";
    std::cin>>hel;
    std::cout<<"Number "<< hel << (std::find(vec.begin(), vec.end(), one) != vec.end() ? " is " : " is not ")
    <<"degree of 2\n";
    system("pause");
    return 0;
}
silent_1991
21.01.2011, 11:17     Цикл while
  #7

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
так сказать частный случай
Ну почему частный, вполне обычный случай)))

Yandex
Объявления
21.01.2011, 11:17     Цикл while
Ответ Создать тему
Опции темы

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