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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
ser2511
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 26
#1

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

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

Определить является ли число к степенью 3.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2011, 00:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить является ли число к степенью 3 (C++):

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

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

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

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

Определить, является ли данное число степенью двойки - C++
Является ли данное число степенью двойки? Формат входных данных Вводится число. Формат выходных данных Напечатать YES, если оно...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Merlin666
96 / 96 / 10
Регистрация: 26.12.2010
Сообщений: 220
17.02.2011, 01:01 #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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.02.2011, 01:03 #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
96 / 96 / 10
Регистрация: 26.12.2010
Сообщений: 220
17.02.2011, 01:06 #4
Два альтернативных решения=)
ser2511
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 26
17.02.2011, 01:07  [ТС] #5
а возможно написать с циклом, к примеру for???
Merlin666
96 / 96 / 10
Регистрация: 26.12.2010
Сообщений: 220
17.02.2011, 01:13 #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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.02.2011, 01:14 #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
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.02.2011, 01:18 #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  [ТС] #9
Merlin666 спс, помог в тему!!!
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.02.2011, 01:26 #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
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.02.2011, 01:27 #11
silent_1991, Вполне справедливо. Согласен
igorrr37
1646 / 1274 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
17.02.2011, 04:39 #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";
    }
}
fasked
Эксперт С++
4935 / 2515 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.02.2011, 15:07 #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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2011, 15:07
Привет! Вот еще темы с ответами:

Определить, является ли натуральное число k степенью числа - C++
2. Составить программу для определения, является ли натуральное число k степенью числаВнимательнее выбирайте раздел для размещения тем

Определить, является ли натуральное число степенью другого числа - C++
Помогите написать программу используя while или do...while. : Составить программу для определения, является ли натуральное число к...

Вводится число. Определить, является ли оно степенью двойки. - C++
Вводится число. Определить, является ли оно степенью двойки. Необходимо использовать Операторы цикла ! Спасибо за внимание!

Определить, является ли заданное число точной степенью двойки - C++
Дано натуральное число N. Вывести слово YES, если число N является точной степенью двойки, или слово NO в противном случае. При решении...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.02.2011, 15:07
Ответ Создать тему
Опции темы

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