[英]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;
使用在 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++ 中,^ 是按位异或运算符……你需要使用 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.