伙计们,我正在读一本书,对以下问题的次要目标感到困惑。
数的幂可以通过将数本身乘以指数值的次数来计算。例如,可以将2乘以4乘以得到16,从而得出2乘以4的幂。编写一个程序,该程序:1.输入一个双精度数作为基数,并输入一个整数作为指数;
double base, ans = 0;
int exponent;
cout << "This program will calculate the power of any number that you enter.." << endl;
cout << "Please enter your base number" << endl;
cin >> base;
cout << "Thank you" << endl;
cout << "Please enter the Exponent" << endl;
cin >> exponent;
使用一个循环,将基数本身乘以基数,该循环重复int的次数;
while (exponent != 0)
{
ans = ans + (base * base);
--exponent;
}
输出计算出的指数值。
cout << "The answer is " << ans << endl;
[如果int值为0,则在输出为1的特殊情况下使用if语句。
if (exponent == 0)
{
cout << "The answer is " << 1 << " because the exponent value entered was 0" << endl;
}
对于更具挑战性的版本,请处理指数为负的情况。(这是我的问题所在。.如果不使用POW,我将无法正常工作)这是我尝试过的:
else if (exponent < 0)
{
ans = pow(base, exponent);
/*
ans++;
while (exponent != 0)
{
ans = 1/(ans + (base * base));
++exponent;
}
*/
cout << "The answer is " << ans << endl;
}
我在网上进行了一些搜索,发现:“代表负指数。您要做的就是将1除以正指数。例如:6 ^ -2 = 1 /(6 ^ 2)。“
并且:“好吧,因为在C ++中,^是按位xor运算符...您需要使用pow()才能执行此操作。”
欢迎任何帮助或评论在此先感谢
[在数学上(即^
在这里是指数)只是一个约定和定义的问题]
a ^ (-b) = 1 / (a^b)
因此,如果您知道如何计算(a^b)
,则只需要取倒数即可得到所需的结果。类似于:
double my_pow(double a,double b) {
if (b < 0) return 1.0 / pow(a,std::abs(b));
else return pow(a,b);
}
据我所知,您想编写自己的pow
实现,所以这仅是为了说明如何使用适用于正指数和负指数的pow
。
关于您的代码,我看不出这是怎么回事
while (exponent != 0) { ans = ans + (base * base); --exponent; }
可能是正确的。
使用一个循环,将基数本身乘以基数,该循环重复int的次数;
没有那真的不是那个循环在做什么。
我希望看到这样的东西
ans = 1;
for (int i=0; i< exponent;++i) {
ans *= base;
}
PS:如果您实际上不想自己写,可以使用std::pow
。可以与负指数一起使用。
使用双数据类型而不是整数,因为它没有显示小数点后的值并最终给出0作为输出。
并且也可以使用1 / pow(基数,指数)代替1 /(6 ^ 2)。
希望您觉得这有用。😇