Работа с отрицательными показателями без использования военнопленного в C ++ - PullRequest
0 голосов
/ 17 января 2020

Эй, ребята, я работаю над книгой и немного озадачен подзадачей следующего вопроса.

Сила чисел может быть рассчитана путем умножения числа на себя столько раз как значение показателя степени. Например, 2, возведенное в степень 4, можно рассчитать, умножив 2 на 4 раза, чтобы получить 16. Напишите программу, которая: 1. вводит double как базовое число и int как показатель степени;

double base, ans = 0;
int exponent;

cout << "This program will calculate the power of any number that you enter.." << endl;
cout << "Please enter your base number" << endl;
cin >> base;
cout << "Thank you" << endl;
cout << "Please enter the Exponent" << endl;
cin >> exponent;

умножает базовое число на себя, используя al oop, которое повторяется для числа раз в целом числе;

while (exponent != 0)
{
    ans = ans + (base * base);
    --exponent;
}

выводит вычисленное экспоненциальное значение.

cout << "The answer is " << ans << endl;

Используйте оператор if для особого случая, когда выходное значение равно 1, если значение int равно 0.

if (exponent == 0)
{
    cout << "The answer is " << 1 << " because the exponent value entered was 0" << endl;
}

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

else if (exponent < 0)
{
    ans = pow(base, exponent);
    /*
    ans++;
    while (exponent != 0)
    {
        ans = 1/(ans + (base * base));
        ++exponent;
    }
    */
    cout << "The answer is " << ans << endl;
}

Я провел поиск в Интернете и обнаружил это: "Для представления отрицательного показателя. Все вы должны сделать это разделить 1 на положительный показатель. Пример: 6 ^ -2 = 1 / (6 ^ 2). "

и это:" Ну, это потому, что в C ++ ^ является побитовым оператором xor ... для этого вам нужно использовать pow (). "

любая помощь или комментарии приветствуются заранее

1 Ответ

1 голос
/ 17 января 2020

Это просто вопрос соглашений и определений, что в математике (ie ^ здесь есть экспонента)

a ^ (-b) = 1 / (a^b)

Следовательно, если вы знаете, как вычислить (a^b), вам просто нужно взять взаимный, чтобы получить желаемый результат. Что-то вроде:

double my_pow(double a,double b) {
      if (b < 0) return 1.0 / pow(a,std::abs(b));
      else return pow(a,b);
}

Как я понял, вы хотите написать собственную реализацию pow, так что это просто для иллюстрации того, как использовать pow, который работает для положительных показателей также с отрицательными.

Что касается вашего кода, я не вижу, как это

while (exponent != 0)
{
    ans = ans + (base * base);
    --exponent;
}

может быть правильным.

умножает базовое число на себя, используя al oop, который повторяется для числа раз в целом;

Нет. Это не совсем то, что делает этот oop.

Я бы предпочел увидеть что-то подобное

ans = 1;
for (int i=0; i< exponent;++i) {
    ans *= base;
}

PS : Если вы на самом деле этого не делаете хотите написать свой, вы можете использовать std::pow. Может использоваться с отрицательными показателями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...