仅使用添加功能?

时间:2015-02-18 03:54:06

标签: c++ pow

我必须为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;
}

4 个答案:

答案 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),所以请考虑一下。