标签:数值的整数次方
数值的整数次方
注意:
0的0次方是没有意义的;
0的负数负数次方也是无意义的;
注意base与0值的比较;
exponent为负数时,先转化成正数再求倒数。
(1)这种方法比较直观。while()循环。
#include<stdio.h> #include<stdlib.h> #define m 0.000001 double DoublePower(double base,int exponent) { int flags=0; double sum=1.00; if((base>-m)&&(base<m)) { if(exponent<=0) { printf("error\n"); return -1; } while(exponent--) { sum*=base; } } else { if(exponent<0) { exponent=0-exponent; flags=1; } while(exponent--) { sum*=base; } if(flags==1) { sum=1/sum; } } return sum; } void test() { printf("base为0,exponent为0:%lf\n",DoublePower(0.00,0)); printf("base为0,exponent为负数时:%lf\n",DoublePower(0.00,-1)); printf("base为0,exponent为正数:%lf\n",DoublePower(0.00,2)); printf("base为负数,exponent为正数:%lf\n",DoublePower(-2.00,2)); printf("base为正数,exponent为正数:%lf\n",DoublePower(3.00,2)); printf("base为负数,exponent为负数:%lf\n",DoublePower(-2.00,-2)); printf("base为正数,exponent为负数:%lf\n",DoublePower(2.00,-2)); } int main() { test(); system("pause"); return 0; }
(2)采用递归函数实现
#include<stdio.h> #include<stdlib.h> #define m 0.000001 double DoublePower(double base,int exponent) { int flags=0; if(base>-m&&base<m) //base与0值的比较 { if(exponent<=0) // exponent 小于等于0时无意义 { printf("error\n"); return -1; } else { return 0.000; } } if(exponent<0) //当exponent为负数时,把标识符置为1 { flags=1; exponent=0-exponent; } if(exponent==0) { return 1.00; } exponent--; base*=DoublePower(base,exponent); //递归实现累乘 if(flags==1) { base=1/base; } return base; } void test() { printf("base为0,exponent为0:%lf\n",DoublePower(0.00,0)); printf("base为0,exponent为负数时:%lf\n",DoublePower(0.00,-1)); printf("base为0,exponent为正数:%lf\n",DoublePower(0.00,2)); printf("base为负数,exponent为正数:%lf\n",DoublePower(-2.00,2)); printf("base为正数,exponent为正数:%lf\n",DoublePower(3.00,2)); printf("base为负数,exponent为负数:%lf\n",DoublePower(-2.00,-2)); printf("base为正数,exponent为负数:%lf\n",DoublePower(2.00,-2)); } int main() { test(); system("pause"); return 0; }
结果:
本文出自 “liveyoung” 博客,转载请与作者联系!
标签:数值的整数次方
原文地址:http://10707042.blog.51cto.com/10697042/1771254