使用循环C++中的指数
Exponents in C++ by using loops
我需要一些帮助。我想计算给定实值 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^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);
相关文章:
- 使用简单类型列表实现的指数编译时间.为什么
- 如何从组合指数中找到仓位
- 正在读取 obj 文件!(指数)
- C++:快速模块化指数
- 在C++不使用 POW 的情况下处理负指数
- 比较向量中的元素时所花费的时间呈指数级增长
- 如何将包含指数的 QString 转换为C++中的双倍?
- 将数字提高到一个巨大的指数
- 负指数是否必然意味着未定义的行为
- 整数的指数速记
- 在矩阵逆变器上工作,由于某种原因,我的指数循环不起作用
- 自定义提升多精度指数中的位数
- 如何计算复矩阵的指数
- 用C++打印指数形式的素数分解
- 为什么Regex(c++)需要指数时间
- 指数近似不适合小输入或大输入
- 如果 std::numeric_limits<float>::is_iec559 为真,这是否意味着我可以以明确定义的方式提取指数和尾数?
- 在 c++ 中创建具有指数分布的随机数(可视化标准)
- 使用双精度运算的快速 SSE 低精度指数
- C ++指数计算器错误