#include <iostream> using namespace std; double power(double x, int n) { if (n == 0) { return 1.0; } double half = power(x, n / 2); if (n % 2 == 0) { return half * half; } else if (n > 0) { return half * half * x; } else { return half * half / x; } } int main() { double x; int n; cout << "Please enter x: "; cin >> x; cout << "Please enter n: "; cin >> n; double result = power(x, n); cout << x << " to the power of " << n << " is " << result << endl; return 0; }解析这段代码
时间: 2024-02-29 16:57:20 浏览: 56
这段代码实现了一个计算幂的函数`power`,使用了递归的方式。具体来说,如果指数`n`为0,则返回1.0;否则,将指数`n`除以2并递归调用`power`函数求出`x`的`n/2`次幂,记为`half`。如果`n`是偶数,则`x`的`n`次幂等于`half`的平方;如果`n`是正奇数,则`x`的`n`次幂等于`half`的平方乘以`x`;如果`n`是负奇数,则`x`的`n`次幂等于`half`的平方除以`x`。主函数中通过输入`x`和`n`,调用`power`函数计算`x`的`n`次幂并输出结果。
相关问题
#include<iostream> #include<cmath> using namespace std; template<typename T> T power(T base, int exponent) { if (exponent == 0||base==0) { cout<<1<<endl; } else if (exponent == 1) { return base; } else { cout << pow(base, exponent) ; } } int main() { int x,y, z; double m; cin >> x >> z; cin >> m>>y; power<int>(x, z); cout << endl; power<double>(m, y); return 0; }
这段代码实现了一个模板函数 power,用于计算基数的指数幂。其中,基数可以是 int 或 double 类型,指数为 int 类型。如果指数为 0 或者基数为 0,输出 1;如果指数为 1,返回基数;否则,使用 pow 函数计算基数的指数幂并输出。在主函数中,用户输入两组数值,分别作为基数和指数,然后分别调用 power 函数进行计算并输出结果。其中,第一个调用使用 int 类型的基数和指数,第二个调用使用 double 类型的基数和 int 类型的指数。
#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> using namespace std; long long power(long long x,long long time) { long long ans=1; for(int i=1;i<=time;i++)ans*=x; return ans; } long long getjie(long long x) { long long ans=1; for(int i=1;i<=x;i++)ans*=i; return ans; } double get(long long x,int time) { long long ans1=power(x,time); long long ans2=getjie(time); return(double)ans1/(double)ans2; } int main() { int n;cin>>n; if(n==1){cout<<"1"<<endl;return 0;} double ans=1; int time=1; while(1) { double temp=get(n,time); if(temp<0.000001)break; ans+=temp;time++; } printf("%.4If\n",ans); }
这段代码实现了一个计算e的x次幂的程序。具体来说,它使用了泰勒级数的方法,通过计算e^x的无限级数展开式来逼近e^x的值。具体的计算公式为:
e^x = 1 + x/1! + x^2/2! + x^3/3! + ... + x^n/n!
代码中首先让用户输入整数n,然后使用while循环来计算上述级数,直到某一项的值小于0.000001时停止计算。在循环中,使用了三个自定义函数:power、getjie和get。
函数power用来计算x的time次幂;函数getjie用来计算time的阶乘;函数get用来计算x的time次幂除以time的阶乘。最终将get函数的返回值加到ans中,并将time加1。最后使用printf函数输出结果,保留4位小数。
需要注意的是,这段代码中使用了自定义函数来计算幂次方和阶乘,避免了使用pow和循环计算的精度问题。另外,这种实现方式虽然比较直观,但是效率比较低,时间复杂度为O(n^2)。
建议使用C++标准库中的exp函数来计算e的x次幂,这个函数可以保证精度和效率。
阅读全文