我需要一些帮助。我想计算给定实值 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。然后:
例如,如果 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^x
,int
对于许多实际情况可能太小,请考虑更大的类型,例如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);