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

Функция для возведения в степень (стыдно) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 44, средняя оценка - 4.86
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
20.05.2011, 02:31     Функция для возведения в степень (стыдно) #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
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
using namespace std;
 
#include <conio.h>
 
 
 
int integerPower (int base, int exponent);
 
int main()
{
    int main_base;
    int main_exponent;
    
    cout << "Enter a base, please: ";
    cin >> main_base;
    
    cout << "Enter an exponent, please: ";
    cin >> main_exponent;
    
    cout << "\nResult is: " << integerPower (main_base, main_exponent);
    
    getch();
    return 0;
}
 
int integerPower (int base, int exponent)
{
    int x;
    
    for (int count = 1; count <= exponent; count++)
    {
        x = base * base;
    }
    
    return x;
}
Что здесь не так?
Стыдно(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
20.05.2011, 02:41     Функция для возведения в степень (стыдно) #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <cmath>
 
template < typename T >
double Degree (T num, T deg)
{
    return (exp(deg * log(num)));
}
 
int main ()
{
    std::cout << Degree(2, 3) << std::endl;
    std::cin.get();
    return 0;
}
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
20.05.2011, 02:43  [ТС]     Функция для возведения в степень (стыдно) #3
Извините, забыл сказать, нельзя пользоваться математическими функциями.
Надо действовать в лоб, вроде как у меня в коде.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
20.05.2011, 02:47     Функция для возведения в степень (стыдно) #4
Цитата Сообщение от vortexx1 Посмотреть сообщение
x = base * base;
заменить на
C++
1
x *= base;
Добавлено через 3 минуты
и инициализируйте
C++
1
int x = 1;
иначе не правильно...
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
20.05.2011, 12:27  [ТС]     Функция для возведения в степень (стыдно) #5
Спасибо, заработало!


C++
1
2
3
4
5
6
7
8
9
10
11
int integerPower (int base, int exponent)
{
    int x = 1;
    
    for (int count = 1; count <= exponent; count++)
    {
            x *= base;
    }
    
    return x;
}
А х = 1 это да, сам заметил, иначе оно левые числа выдавало.

Добавлено через 9 часов 39 минут
Народ, а как сделать то же самое, только при помощи рекурсии?
Спасибо.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.05.2011, 12:30     Функция для возведения в степень (стыдно) #6
vortexx1,
C++
1
2
3
4
5
6
7
8
9
10
int integerPowerHelper(int base, int exponent, int result)
{
     if(exponent < 1)
        return result;
     return integerPowerHelper(base, --exponent, result*base);
}
int integerPower(int base, int exponent)
{
    return integerPowerHelper(base, exponent, 1);   
}
или
C++
1
2
3
4
5
6
int integerPower(int base, int exponent)
{
    if(exponent <= 1)
      return base;
    return  base * intergerPower(base, --exponent);
}
Yandex
Объявления
20.05.2011, 12:30     Функция для возведения в степень (стыдно)
Ответ Создать тему
Опции темы

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