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

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

Войти
Регистрация
Восстановить пароль
 
Robespyer
0 / 0 / 0
Регистрация: 07.05.2016
Сообщений: 13
#1

Вывести степень натурального числа - C++

24.06.2016, 20:45. Просмотров 385. Ответов 12
Метки нет (Все метки)

Я не очень дружу с математикой, поэтому для меня абра-кадабра следующее задание:

"Дано натуральное число N. Вывести ближайшую к этому числу степень двойки, тройки и пятёрки".

Ну, степень я знаю что такое. Только не могу понять, где какое число, что возводить в степень. Помогите решить, желательно, с объяснением задания.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2016, 20:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести степень натурального числа (C++):

Составьте программу возведения данного натурального числа а в степень п - C++
Составьте программу возведения данного натурального числа а в степень p. с помошью while, repeat, for

Составить программу возведения указанного натурального числа в заданную целую степень - C++
Помогите ГОРЮ!) вообще не могу понять условия) Составить программу возведения данного натурального числа a в целую степень n. Учесть,...

Для заданного натурального числа N вывести в столбик все совершенные числа меньшие N c++ - C++
Для заданного натурального числа N вывести в столбик все совершенные числа меньшие N. Совершенное число – натуральное число, которое равно...

Вывести все числа от 1 до заданного натурального числа n (рекурсия) - C++
Дано натуральное число n. Выведите все числа от 1 до n (Рекурсия) Ввод - 5 Вывод - 1 2 3 4 5 Как сделать...

Вывести цифры заданного натурального числа - C++
Помогите пожалуйста. Нужно: Вывести цифры заданного натурального числа.

Вывести все делители заданного натурального числа с++ - C++
Вывести все делители заданного натурального числа

12
nmcf
5354 / 4674 / 1565
Регистрация: 14.04.2014
Сообщений: 18,634
25.06.2016, 09:12 #2
Ищешь такое a, чтобы 2a было ближайшим к N. То же с остальными.
0
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 449
25.06.2016, 09:36 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <cmath>
using namespace std;
 
int main() {
    int number = 0;
    cout << "Enter number:" << endl;
    cin >> number;
    cout << "2: " << static_cast<int> (log(number)/log(2)) << endl;
    cout << "3: " << static_cast<int> (log(number)/log(3)) << endl;
    cout << "5: " << static_cast<int> (log(number)/log(5)) << endl;
    return 0;
}
1
nmcf
5354 / 4674 / 1565
Регистрация: 14.04.2014
Сообщений: 18,634
25.06.2016, 10:08 #4
1Вирт1, для number = 7 ближайшая степень двойки будет 3 (8), а не 2 (4).
0
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 449
25.06.2016, 10:24 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <cmath>
using namespace std;
 
int main() {
    int number = 0;
    cout << "Enter number:" << endl;
    cin >> number;
    cout << "2: " << static_cast<int> (ceil(log(number)/log(2))) << endl;
    cout << "3: " << static_cast<int> (ceil(log(number)/log(3))) << endl;
    cout << "5: " << static_cast<int> (ceil(log(number)/log(5))) << endl;
    return 0;
}
Добавлено через 34 секунды
nmcf все довольны?

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <cmath>
using namespace std;
 
int main() {
    int number = 0;
    cout << "Enter number:" << endl;
    cin >> number;
    cout << "2: " << static_cast<int> (floor(log(number)/log(2)+ 0.5)) << endl;
    cout << "3: " << static_cast<int> (floor(log(number)/log(3)+ 0.5)) << endl;
    cout << "5: " << static_cast<int> (floor(log(number)/log(5)+ 0.5)) << endl;
    return 0;
}
0
nmcf
5354 / 4674 / 1565
Регистрация: 14.04.2014
Сообщений: 18,634
25.06.2016, 10:27 #6
1Вирт1, нет. Теперь обратный эффект - для number = 5 не верно.
0
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 449
25.06.2016, 10:27 #7
с флуором все верно
0
nmcf
5354 / 4674 / 1565
Регистрация: 14.04.2014
Сообщений: 18,634
25.06.2016, 10:29 #8
С округлением лучше, но мне кажется, что нужно целочисленными методами делать или хотя бы выбирать между floor() и ceil().
0
1Вирт1
55 / 53 / 5
Регистрация: 25.08.2011
Сообщений: 449
25.06.2016, 10:32 #9
там без разници в сейле отнимаешь 0.5 в флуоре прибавляешь
я просто редактировать код не могу какого то...
0
regio1961
111 / 111 / 50
Регистрация: 06.06.2016
Сообщений: 254
25.06.2016, 16:55 #10
В задании требовалось вывести ближайшую к этому числу степень двойки, тройки и пятёрки,
а не показатель степени http://math-prosto.ru/?page=pages/stepeni/stepeni1.php.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 size_t nearest_degree( const size_t &number, const size_t & base )
 {
   size_t sup_degree = 1;
       while ( sup_degree <= number )
       {
         sup_degree *= base;
       }
   size_t inf_degree = sup_degree / base;
   return ( ( sup_degree - number ) < ( number - inf_degree ) )
          ? sup_degree : inf_degree;
 }
 int main()
 {
   size_t number = 30;
   std::cout << nearest_degree( number, 2 ) << std::endl;
   std::cout << nearest_degree( number, 3 ) << std::endl;
   std::cout << nearest_degree( number, 5 ) << std::endl;
   //std::cin.get();
 }
Условие в скобках после return можно упростить, оставил так для лучшего понимания.
0
nmcf
25.06.2016, 19:55
  #11

Не по теме:

regio1961, ты буквоед.

0
regio1961
111 / 111 / 50
Регистрация: 06.06.2016
Сообщений: 254
26.06.2016, 12:50 #12
Термин "буквоед" ты, видно, понимаешь так же, как понял условие задачи.
0
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
28.06.2016, 08:41 #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
25
26
27
28
29
30
31
32
33
//Дано натуральное число N. Вывести ближайшую к этому числу
//степень двойки, тройки и пятёрки.
///////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <iostream>
///////////////////////////////////////////////////////////////////////////////
template< int   base >
int     nearest_degree( int     n )
{
    int     degree      =   log(n) / log(base);
    int     res         =   pow( base,  degree );
    int     average     =   res * (base + 1) / 2;
 
    return  n   >=  average
                ?   res   *     base
                :   res;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        std::cout   <<  "n = ";
        int     n{};
        std::cin    >>  n;
 
        std::cout   <<  nearest_degree<2>(n)   <<  '\t'
                    <<  nearest_degree<3>(n)   <<  '\t'
                    <<  nearest_degree<5>(n)
                    <<  std::endl
                    <<  std::endl;
    }//for
}
0
28.06.2016, 08:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2016, 08:41
Привет! Вот еще темы с ответами:

Вывести на экран шестнадцатеричное представление натурального числа - C++
Всем доброго времени суток. Задание: Вывести на экран шестнадцатеричное представление данного натурального числа. Сама...

Вывести остаток от деления натурального числа на пять прописью - C++
1. Задано натуральное число. Определить остаток от деления на пять и вывести на экран запись вида «Остаток равен …», подставив на место …...

Для заданного натурального числа N вычислить и вывести на экран - C++
Подскажи как решать это задание пожалуйста. ил ихотябы объясните что означают большие символы)) Для заданного натурального числа N...

Вывести все представления натурального числа в виде сумм чисел - C++
Есть программа ,распечатывающая все представления натурального числа суммами натуральных чисел.При вводе больших чисел в dev cpp не выводит...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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