Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/43: Рейтинг темы: голосов - 43, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 26

Определить является ли число к степенью 3

17.02.2011, 00:49. Показов 8759. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Определить является ли число к степенью 3.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2011, 00:49
Ответы с готовыми решениями:

Определить является ли число k степенью 3
Определить является ли число k степенью 3. Помогите решить...

Определить является ли число степенью двойки
Стоит задача Ввести число. Определить является ли оно степенью 2 (число 16 является, а 22 нет)

Определить, является ли число степенью двойки
По заданному положительному числу n < 2^64 определить, является ли оно степенью двойки. Решение должно иметь сложность O(1). 1 ...

12
 Аватар для Merlin666
98 / 98 / 29
Регистрация: 26.12.2010
Сообщений: 220
17.02.2011, 01:01
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main()
{
    cout<<"Enter n: ";
    int n;
    cin>>n;
    bool flag=true;
 
    while ((n>3)&&(flag))
    {
        if ((n % 3)==0) n/=3;
        else flag=false;
        
    }
 
    if ((flag)&&(n%3==0)) cout<<"Yes";
    else cout<<"No";
}
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.02.2011, 01:03
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
25
26
27
28
29
30
31
#include <iostream>
 
bool is_cube(int);
 
int main()
{
    int num;
 
    std::cout << "Enter number: ";
    std::cin >> num;
 
    std::cout << "Number is ";
 
    if (!is_cube(num))
        std::cout << "not ";
    
    std::cout << "a cube" << std::endl;
    
    return 0;
}
 
bool is_cube(int num)
{
    const int q = 3;
    int n = 1;
 
    while (n < num)
        n *= q;
 
    return n == num;
}
0
 Аватар для Merlin666
98 / 98 / 29
Регистрация: 26.12.2010
Сообщений: 220
17.02.2011, 01:06
Два альтернативных решения=)
0
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 26
17.02.2011, 01:07  [ТС]
а возможно написать с циклом, к примеру for???
0
 Аватар для Merlin666
98 / 98 / 29
Регистрация: 26.12.2010
Сообщений: 220
17.02.2011, 01:13
Через for=)
C++
1
2
3
4
5
6
7
8
        bool flag=false;
    int q=3;
    for (int i=0; pow((double)q,i)<=n; i++)
    {
        if (pow((double)q,i)==n) flag=true;
    }
 
    cout<<flag;
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.02.2011, 01:14
Извратился, чтобы и для отрицательных работало))) Плюс поправил название функции и выводимое сообщение, а то проверяю одно, а пишу другое)))
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
25
26
27
28
29
30
31
32
#include <iostream>
 
bool is_power_of_three(int);
 
int main()
{
    int num;
 
    std::cout << "Enter number: ";
    std::cin >> num;
 
    std::cout << "Number is ";
 
    if (!is_power_of_three(num))
        std::cout << "not ";
    
    std::cout << "a power of three" << std::endl;
    
    return 0;
}
 
bool is_power_of_three(int num)
{
    const int q = 3;
    int n = 1;
    int count;
 
    for (count = 0; n < (num > 0 ? num : -num); ++count)
        n *= q;
 
    return count % 2 == 0 ? n == num : (n == num || -n == num);
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.02.2011, 01:18
Ишо одна альтернатива. Не знаю зачем, но пусть будет.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
int degr(int one, int deg, int res)
{
    return one <= 1 ? res : degr(one/3, deg, res*3);
}
 
int main()
{
    int number=81;
    if(degr(number, 3, 1) == number)
        std::cout<<"Yes\n";
    number=243;
    if(degr(number, 3, 1) == number)
        std::cout<<"Yes\n";
    number=555;
    if(degr(number, 3, 1) != number)
        std::cout<<"No\n";
}
1
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 26
17.02.2011, 01:22  [ТС]
Merlin666 спс, помог в тему!!!
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.02.2011, 01:26
ForEveR, красиво)))
Я бы вашу реализацию так разбил:

C++
1
2
3
4
5
6
7
8
9
10
11
12
bool degr(int, int);
int degr_helper(int, int, int);
 
bool degr(int one, int deg)
{
    return one == degr_helper(one, deg, 1);
}
 
int degr_helper(int one, int deg, int res)
{
    return one <= 1 ? res : degr_helper(one / 3, deg, res * 3);
}
ИМХО, пользователь должен ввести два числа и получить ответ, является ли одно число степенью другого, не вникая в детали реализации (обязательная передача 1) и не сравнивая потом результат с самим числом. Но это ИМХО, конечно)))
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.02.2011, 01:27
silent_1991, Вполне справедливо. Согласен
0
 Аватар для igorrr37
2895 / 2042 / 992
Регистрация: 21.12.2010
Сообщений: 3,791
Записей в блоге: 9
17.02.2011, 04:39
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<cmath>
 
int main(){
    int n;
    double p, d;
    while(true){
        std::cin>>n;
        p=log10(n)/log10(3);
        std::cout<<"P= "<<p<<"\n";
        if(modf(p, &d)==0) std::cout<<"YES\n";
        else std::cout<<"NO\n";
    }
}
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
17.02.2011, 15:07
возможна погрешность
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>
#include <iomanip>
#include <cmath>
 
bool foo (int n)
{
    float r = log((float)n) / log(3.0);
    return floor(r + 0.5) == r ? true : false;
}
 
int main()
{
    // positive test
    for (int i = 0, n = 3; i < 6; ++i, n *= 3) {
        std::cout << std::setw(3) << n << " | " << foo(n) << std::endl;
    }
 
    // negative
    for (int i = 0, n = 2; i < 6; ++i, n *= 2) {
        std::cout << std::setw(3) << n << " | " << foo(n) << std::endl;
    }
 
    return 0;
}
3 | 1
9 | 1
27 | 1
81 | 1
243 | 1
729 | 1
2 | 0
4 | 0
8 | 0
16 | 0
32 | 0
64 | 0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2011, 15:07
Помогаю со студенческими работами здесь

Определить, является ли число степенью двойки
Такая проблема: в проге мне нужно задать количество чисел которые я введу (т.е создать массив под них), потом ввести числа и оно должно мне...

Определить, является ли число Х степенью числа 2
Является ли число Х степенью числа 2(ЙЕС или НОУ)? Например числа 8,2,32- Являются, а 5,7,6-нет.

Определить является ли число степенью тройки
Помогите , напишете код программы ( Определить является ли число степенью тройки )

Определить, является ли число целой степенью двойки
Задано целое положительное число.Определить, является ли оно целой степенью двойки. Вход 1 16 1028 1024 Выход Yes

Определить, является ли число степенью двойки (циклы)
Вводится число. Определить, является ли оно степенью двойки. ( с помощью цикла) Думала примерно так, но знаю не правильно ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru