不清楚 pow() 函数的算法,应该如 牛虻 所说的吧。 有个办法能使程序运行快原来差不多一半的,但不是最好的。方法很简单: N的M次方=(N*N)的 M/2 次方,M如果不是偶数则在求出结果后再乘一次就OK。 让循环的次数减少一半,那理论上会比原来快接近一半的速度。 如果再按同样的方法继续减少幂的次数,也可能会徒添难度和麻烦。 附上源代码: #include "stdio.h" #include "conio.h"
int cdecl main(void) { double Result=1.0; int M,M2; double N; int T=0; /*辅助循环的临时变量*/ int T2; double R; /*存储 N*N 的值的变量 */ /* 提示输入 N 和 M,这里输入的 N 和M 不检查是否输入错误了,若超出了数值最大表达范围,会产生一个运行期错误*/ printf("Input (N,M):\n"); scanf("%lf,%d",&N,&M);
M2 = M; if( N == 0 ) /*底数为0的情况*/ Result = 0; else if(M == 0) /*指数为0的情况*/ Result = 1; else { M = abs(M); R = N*N; /* R 得到 N*N 的值*/ T2 = M/2; /*T2为循环次数,它是 M 的一半*/
while(T++<T2) Result *= R;
if(M%2) Result *= N; /*是奇数的话,让它再乘一次 N*/ }
if(M2<0) /*指数为负,则结果为其倒数*/ Result = 1.0/Result;
printf("Result: [%.5lf]",Result); getch(); return 0; }
[此贴子已经被作者于2005-5-18 3:04:07编辑过]