一. 函数介绍
pow(x, y) —— 求x的y次方
sqrt(x) — 求x的算数平方根
二. pow函数模拟实现
普通版:递减n的大小,逐次乘num。
#include<stdio.h> double MyPow(double num, int n) { if (n < 0) return 1.0 / MyPow(num, -n); else if (n == 0) return 1.0; else if (n > 0) return num * MyPow(num, n - 1); } int main() { printf("%lf\n", my_pow(2,-2)); return 0; }
优化版:依据n的奇偶性分情况进行递归处理。
#include<stdio.h> double MyPow(double num, int n) { if (n < 0) return 1.0 / MyPow(num, -n); else if (n == 0) return 1.0; else if (n > 0) { double tmp = MyPow(num, n / 2); if (0 == (n%2)// n为偶数时 return tmp * tmp; else// n为奇数时 return num*tmp*tmp; } } int main() { printf("%lf\n", my_pow(2,-2)); return 0; }
运行结果
三. sqrt函数模拟实现
使用二分查找1~x范围内平方小于x的最大的数就是最终结果
int mySqrt(int x) { int left = 1; int right = x; int ret = 0; while(left <= right) { int mid = left + (right-left)/2; if(mid <= x/mid) { ret = mid; left = mid + 1; } else { right = mid - 1; } } return ret; }