c语言 用迭代 求x的n次方 吧 用C语言程序设计:求x的n次方的函数。

c\u8bed\u8a00 \u7528\u8fed\u4ee3 \u6c42x\u7684n\u6b21\u65b9

b^n = (b ^ (n / 2) ^ 2) (n\u4e3a\u5076\u6570)
b^n = b * b ^ (n - 1) (n\u4e3a\u5947\u6570)

\u7ed9\u4f60\u51fd\u6570\uff0c\u4f20\u5165m\uff0cn\uff0c\u8fd4\u56dem\u7684n\u6b21\u65b9
int fun(m, n)
{
if(n == 0)
return 1;
if(n%2==0)
return pow(fun(m, n/2), 2);
else
return m*fun(n-1);
}

(-_-!\u8fd9\u79cd\u4e1c\u897f\u7adf\u7136\u4e0d\u8ba9\u7528\u9012\u5f52\uff1f\uff01\u5178\u578b\u7684\u9012\u5f52\u554a

double pow(double x, double y);
pow()\u7528\u6765\u8ba1\u7b97\u4ee5x \u4e3a\u5e95\u7684 y \u6b21\u65b9\u503c\uff0c\u7136\u540e\u5c06\u7ed3\u679c\u8fd4\u56de
\u53ef\u80fd\u5bfc\u81f4\u9519\u8bef\u7684\u60c5\u51b5\uff1a
\u5982\u679c\u5e95\u6570 x \u4e3a\u8d1f\u6570\u5e76\u4e14\u6307\u6570 y \u4e0d\u662f\u6574\u6570\uff0c\u5c06\u4f1a\u5bfc\u81f4 domain error \u9519\u8bef\u3002
\u5982\u679c\u5e95\u6570 x \u548c\u6307\u6570 y \u90fd\u662f 0\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4 domain error \u9519\u8bef\uff0c\u4e5f\u53ef\u80fd\u6ca1\u6709\uff1b\u8fd9\u8ddf\u5e93\u7684\u5b9e\u73b0\u6709\u5173\u3002
\u5982\u679c\u5e95\u6570 x \u662f 0\uff0c\u6307\u6570 y \u662f\u8d1f\u6570\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4 domain error \u6216 pole error \u9519\u8bef\uff0c\u4e5f\u53ef\u80fd\u6ca1\u6709\uff1b\u8fd9\u8ddf\u5e93\u7684\u5b9e\u73b0\u6709\u5173\u3002
\u5982\u679c\u8fd4\u56de\u503c ret \u592a\u5927\u6216\u8005\u592a\u5c0f\uff0c\u5c06\u4f1a\u5bfc\u81f4 range error \u9519\u8bef\u3002
\u9519\u8bef\u4ee3\u7801\uff1a
\u5982\u679c\u53d1\u751f domain error \u9519\u8bef\uff0c\u90a3\u4e48\u5168\u5c40\u53d8\u91cf errno \u5c06\u88ab\u8bbe\u7f6e\u4e3a EDOM\uff1b
\u5982\u679c\u53d1\u751f pole error \u6216 range error \u9519\u8bef\uff0c\u90a3\u4e48\u5168\u5c40\u53d8\u91cf errno \u5c06\u88ab\u8bbe\u7f6e\u4e3a ERANGE\u3002
\u6ce8\u610f\uff0c\u4f7f\u7528 GCC \u7f16\u8bd1\u65f6\u8bf7\u52a0\u5165-lm\u3002
#include
#include
intmain()
{ printf("7 ^ 3 = %f\n",pow(7.0,3.0));
printf("4.73 ^ 12 = %f\n",pow(4.73,12.0));
printf("32.01 ^ 1.54 = %f\n",pow(32.01,1.54));
return0;}
\u8f93\u51fa\u7ed3\u679c\uff1a
7 ^ 3 = 343.000000
4.73 ^ 12 = 125410439.217423
32.01 ^ 1.54 = 208.036691

b^n = (b ^ (n / 2) ^ 2) (n为偶数)
b^n = b * b ^ (n - 1) (n为奇数)

恩,也不难
给个思路
初始res=m, 幂数x=1;
每次平方,x+=x;
找到小于n的最大x
对于剩下的n-x,运用同样的方法(注意写成函数,此方法非递归实现,复杂度Lgn)

double nExponent(double x, int n){
int iter = 1;
while(n != 0){
iter = iter*x;
n --;
}
return iter;
}

int diedai(double ,int );
int main()
{
int a=4;
double b=2;
double c;
c=diedai(b,a);
printf("result is : %d \n",c);
system("PAUSE");
return c;
}

int diedai(double x, int n)
{

int i;
double y;
i=n;
y=x;
if(i==0)
diedai(y,i)=1;
else
diedai(y,i)=y * diedai(y,i-1);
return int(diedai(y,i));
}

扩展阅读:c语言计算x的n次幂 ... 用迭代求n的阶乘c语言 ... 用迭代法求xa ... c语言用迭代法求根号a ... 迭代法求x a c语言 ... c语言如何用迭代法求e ... c语言简单实现x的n次方 ... 简单计算器c语言 ... 用迭代法求方程的根c语言 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网