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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
ser2511
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 26
17.02.2011, 00:49     Определить является ли число к степенью 3 #1
Определить является ли число к степенью 3.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2011, 00:49     Определить является ли число к степенью 3
Посмотрите здесь:

C++ В целочисленном массиве найти и напечатать те элементы, которые являются степенью 2. Написать функцию, проверяющую, является ли число степенью 2.
C++ Определить, является ли данное число степенью двойки
C++ Определить, является ли натуральное число k степенью числа
Вводится число. Определить, является ли оно степенью двойки. C++
C++ Определите, является ли число степенью числа 2, и если является, то выведите значение этой степени
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Merlin666
 Аватар для Merlin666
96 / 96 / 10
Регистрация: 26.12.2010
Сообщений: 220
17.02.2011, 01:01     Определить является ли число к степенью 3 #2
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";
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.02.2011, 01:03     Определить является ли число к степенью 3 #3
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;
}
Merlin666
 Аватар для Merlin666
96 / 96 / 10
Регистрация: 26.12.2010
Сообщений: 220
17.02.2011, 01:06     Определить является ли число к степенью 3 #4
Два альтернативных решения=)
ser2511
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 26
17.02.2011, 01:07  [ТС]     Определить является ли число к степенью 3 #5
а возможно написать с циклом, к примеру for???
Merlin666
 Аватар для Merlin666
96 / 96 / 10
Регистрация: 26.12.2010
Сообщений: 220
17.02.2011, 01:13     Определить является ли число к степенью 3 #6
Через 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;
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.02.2011, 01:14     Определить является ли число к степенью 3 #7
Извратился, чтобы и для отрицательных работало))) Плюс поправил название функции и выводимое сообщение, а то проверяю одно, а пишу другое)))
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);
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
17.02.2011, 01:18     Определить является ли число к степенью 3 #8
Ишо одна альтернатива. Не знаю зачем, но пусть будет.

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";
}
ser2511
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 26
17.02.2011, 01:22  [ТС]     Определить является ли число к степенью 3 #9
Merlin666 спс, помог в тему!!!
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.02.2011, 01:26     Определить является ли число к степенью 3 #10
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) и не сравнивая потом результат с самим числом. Но это ИМХО, конечно)))
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
17.02.2011, 01:27     Определить является ли число к степенью 3 #11
silent_1991, Вполне справедливо. Согласен
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
17.02.2011, 04:39     Определить является ли число к степенью 3 #12
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";
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2011, 15:07     Определить является ли число к степенью 3
Еще ссылки по теме:

Определить, является ли введенное число степенью тройки, если да - то какой C++
C++ Определить, является ли введённое натуральное число целой степенью тройки
C++ Определить, является ли натуральное число степенью другого числа

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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
17.02.2011, 15:07     Определить является ли число к степенью 3 #13
возможна погрешность
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
Yandex
Объявления
17.02.2011, 15:07     Определить является ли число к степенью 3
Ответ Создать тему
Опции темы

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