我必须为pow制作一个函数,但不能使用乘法。我知道我必须创建一个函数来乘以另一个函数来找到指数。乘法函数有效,但我遇到了指数函数的问题。为什么它不会像for循环那样倍增?
#include <iostream>
using namespace std;
int multiply(int, int);
int exponent(int, int);
int main()
{
int a, b;
cout << "Please enter a base number: ";
cin >> a;
cout << "Please enter another the exponent: ";
cin >> b;
cout << endl;
cout << "Number: "<< exponent(a, b) << endl;
return 0;
}
int multiply(int a, int b)
{
int x = 0;
for (int i = 0; i < b; i++)
x += a;
return x;
}
int exponent(int a, int b)
{
int y = 0;
for (int i = 0; i < b; i++)
y = multiply(a, a);
return y;
}
答案 0 :(得分:3)
将您的int exponent(int a, int b)
更改为:
int exponent(int a, int b)
{
int y = 1;
for (int i = 0; i < b; ++i)
y = multiply(y, a);
return y;
}
关键点1 :由于您要成倍增加,因此初始值应为1
。你知道,n * 0 = 0表示所有n。
关键点2 :To&#34;积累&#34;乘法,你需要使用&#34;之前的y
&#34;获得&#34;新y
&#34;。它与+=
函数中的multiply
运算符的想法相同,但考虑它们看起来有点棘手,因为它们的外观不同。
次要点A :我们更喜欢预增量(++i
)到后增量(i++
)。在不久的将来,当你增加一些不是int
的东西(例如迭代器)时,如果你的优化器不够智能,预增量会有一点开销。
答案 1 :(得分:0)
y = multiply(a, a);
应该是,
y = multiply(y, a);
另外,如评论中所述,用1初始化y。
y = 1
答案 2 :(得分:0)
exponent
背后的逻辑是不正确的。你需要使用:
int exponent(int a, int b)
{
int y = 1;
for (int i = 0; i < b; i++)
y = multiply(y, a);
return y;
}
答案 3 :(得分:0)
您的exponent()
算法错误。你没有实现“x到y的幂”,你已经实现了“x乘以x,当y> 0”时。
试试这个:
int exponent(int a, int b)
{
if (b == 0)
return 1;
int y = a;
for (int i = 1; i < b; i++)
y = multiply(y, a);
return y;
}
将来,您可能也可能不需要处理负面力量(b < 0
),所以请考虑一下。