Экспоненты в C ++ с использованием циклов

Мне нужна помощь. Я хочу вычислитьИкс заданное действительное значение а и положительное значение целое число х.

Моя программа:

#include <iostream>
using namespace std;

int main()
{
int a, x;

cout << "Input a: ";
cin  >> a;
cout << "Input x: ";
cin  >> x;

for (int i=0; i<=x; i++)
a= a*a;
cout << "The answer is: " << a;
}

2

Решение

Взгляните на этот цикл:

for (int i=0; i<=x; i++)
a= a*a;
cout << "The answer is: " << a;
}

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

  • После 0 итераций значение a0.
  • После 1 итерации а имеет значение а02
  • После 2 итераций значение a04
  • После 3 итераций значение a08

Например, если a = 2 и x = 4, значения будут 2, 4, 16 и 256, что намного больше, чем вы хотите.

Чтобы это исправить, попробуйте изменить цикл так, чтобы у вас была вторичная переменная, изначально установленная в 1, чтобы вы продолжали умножать на a. Таким образом, вы не меняете значение, на которое вы умножаете на каждой итерации.

Далее, обратите внимание, что ваш цикл выполняется слишком много раз. Поскольку вы выполняете цикл до x и включительно, ваш цикл выполняется x + 1 раз, так что если вы хотите вычислитьИкс вы получите неправильное значение. Попробуйте изменить это на цикл ровно x раз.

Наконец, оператор print выполняется на каждой итерации, поэтому вы увидите все промежуточные значения. Измените код так, чтобы оператор print находился вне цикла.

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

Надеюсь это поможет!

7

Другие решения

Есть пара ошибок:

for (int i=0; i<=x; i++)

это будет цикл для x+1 раз, а не то, что вы хотели.

a= a*a;

каждый раз, когда вы делаете это, a это значение, которое уже умножено, поэтому вам нужна другая переменная для хранения результата.

int result = 1;
for (int i=0; i<x; i++)
result *= a;
}
cout << "The answer is: " << result;

Последнее замечание для расчета a^x, int может быть слишком маленьким для многих практических случаев, рассмотрим больший тип как long long,

4

    int result = 1;
for (int i=1; i<=x; i++)
{
result= result*a;
}

cout << "The answer is: " << result;
}

Надеюсь, что это будет работать для вас

1

Более «забавный» метод — использовать шаблон:

template<unsigned int E>
unsigned int power(unsigned int i)
{
return i * power<E - 1>(i); // template "loop"}

template<>
unsigned int power<0>(unsigned int i) // break the "loop"{
return 1;
}

Чтобы получить результат:

unsigned int result = power<5>(3);

Я думал, что это очевидно, но только для пояснения: этот метод требует, чтобы вы знали показатель степени во время компиляции.

поскольку std::pow существует, немного глупо использовать цикл, но это можно сделать:

unsigned int base = SOME_BASE;
unsigned int exponent = SOME_EXPONENT;
unsigned int result = 1;
for (int i = 0; i < exponent; result *= base, ++i);
-1
По вопросам рекламы [email protected]