繁体   English   中英

在 C++ 中不使用 POW 处理负指数

[英]Dealing with negative exponents without using POW in C++

嘿伙计们,我正在读一本书,我对以下问题的子目标感到有些困惑..

数字的幂可以通过将数字本身乘以指数值的次数来计算。 例如,2 的 4 次方可以通过将 2 乘以 4 次得到 16 来计算。编写一个程序: 1. 输入一个 double 作为基数,一个 int 作为指数;

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;
  1. 使用在 int 中重复次数的循环将基数与自身相乘;

     while (exponent != 0) { ans = ans + (base * base); --exponent; }
  2. 输出计算出的指数值。

     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++ 中,^ 是按位异或运算符……你需要使用 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 它可以与负指数一起使用。

#include <iostream>
using namespace std;

double raise_to_power(double, double);

main(){
double x;
double y;

cout<<"plz enter the number";
cin>>x;
cout<<"plz enter the power";
cin>>y;

cout<<"The power of a number is "<<raise_to_power(x,y);

    
}

double raise_to_power(double number, double power){
double i;
double result;
result=1.0;

for(i=-1; i>=power && power!=0; i-- ){
    
    result=result*(1/number);
    
 }
 
 
 return result;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM