使用循环C++中的指数

Exponents in C++ by using loops

本文关键字:指数 C++ 循环      更新时间:2023-10-16

我需要一些帮助。我想计算给定实值 a 和正值整数 x 的x

我的程序:

#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;
}

看看这个循环:

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

每次通过此循环时,您都会将 a 乘以自身。 假设用户输入数字a 0。 然后:

  • 迭代 0 次后,a 的值为0
  • 1 次迭代后,a 的值为a 02
  • 迭代 2 次后,a 的值为a 04
  • 经过 3 次迭代,a 的值为08

例如,如果 a = 2 且 x = 4,则值将为 2、4、16 和 256,它们比您希望的要大得多。

要解决此问题,请尝试更改循环,以便有一个辅助变量(最初设置为 1),并不断乘以 a。 这样,您就不会更改每次迭代时乘以的值。

接下来,请注意您的循环运行了太多次。 由于你循环到并包括 x,你的循环运行 x + 1 次,所以如果你想计算一个x,你会得到错误的值。 尝试将其更改为正好循环 x 次。

最后,print 语句在每次迭代时运行,因此您将看到所有中间值。 更改代码,使 print 语句位于循环外部。

完成所有这些操作后,请查找pow功能。 如果这是针对作业的,您可能无法使用此功能,但这是解决此问题的最简单方法。

希望这有帮助!

有几个错误:

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^xint对于许多实际情况来说可能太小了,请考虑像 long long 这样的更大类型。

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

希望这对你有用

一个更"有趣"的方法是使用模板:

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);