2

我需要一些帮助。我想计算给定实值 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;
}
4

4 回答 4

7

看看这个循环:

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

每次你通过这个循环时,你自己乘以 a 。假设用户输入数字 a 0。然后:

  • 在 0 次迭代之后, a 的值为 a 0
  • 1 次迭代后,a 的值为 a 0 2
  • 经过 2 次迭代, a 的值为 a 0 4
  • 经过 3 次迭代后,a 的值为 a 0 8
  • ...

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

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

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

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

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

希望这可以帮助!

于 2013-10-14T05:49:23.787 回答
4

有几个错误:

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.

于 2013-10-14T05:50:35.170 回答
1
    int result = 1;
        for (int i=1; i<=x; i++)
        {
          result= result*a;
        }

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

希望这对你有用

于 2013-10-14T05:51:51.910 回答
-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);
于 2013-10-14T07:04:27.537 回答