【发布时间】:2020-02-16 12:41:35
【问题描述】:
我正在编写一个简单的程序来使用函数计算 6^5。这是我的代码
#include <iostream>
using namespace std;
int raiseToPower(int &base, int exponent){
for (int i = 1; i < exponent; i = i + 1){
base= base * base;
}
return base;
}
int main() {
int base = 6;
cout << "6^5 is " << raiseToPower(base, 5)<< endl;
return 0;
}
结果是
6^5 is -683606016
而不是 7776
你们能解释一下为什么我得到这个结果吗? 我不是在寻找另一种编写此代码的方法。我知道有更简单的方法,但我试图了解出了什么问题
【问题讨论】:
-
你不是在计算base^exponent,你是在计算base^(2^(exponent-1))。
-
您的计算量比
6^5大得多。base = base*base;这是按指数的 2 次幂计算的 -
您的第一次迭代执行
base = 6 * 6,即36,并将其分配给base。所以下一次迭代是36 * 36,也就是1296,然后你再次将它分配给base,... -
在这里传递
base作为参考并没有什么意义。您期望从中获得什么好处? -
@t.niese 不建议将 std::pow 用于整数。至少不是不提这整罐蠕虫:stackoverflow.com/questions/9704195/why-pow10-5-9-999-in-c
标签: c++ function loops for-loop definition