【面试题】剑指offer11--求一个数的指数次方,模拟实现一个pow函数
2017-06-14 23:14
387 查看
求一个数的指数次方,就是我们数学中的次方问题。
但是在代码的实现的时候,要考虑的东西很多
指数的范围,基数的范围,还有特殊的情况
代码实现如下:
#include<iostream>
using namespace std;
#include<assert.h>
double PowerWithUnsignedExpond(double base, size_t exponent)
{
if (exponent == 0)//指数为0的时候,直接返回1
{
return 1;
}
if (exponent == 0)//指数为0的时候,直接返回基数
{
return base;
}
//递归求解指数的一半,得到的数的平方就是当前的解
double ret = PowerWithUnsignedExpond(base, exponent >> 1);
ret = ret*ret;
if ((exponent & 0x1) == 1)
{
ret = ret*base;
}
return ret;
}
double Power(double base, int exponent)
{
assert(base != 0.0 || exponent >= 0);
//求出指数的绝对值
size_t absExponent = (size_t)(exponent);
//如果指数小于0,则将指数变成正值
if (exponent < 0)
{
absExponent = (size_t)(-exponent);
}
//递归求解
double ret = PowerWithUnsignedExpond(base, absExponent);
//如果指数小于0,求倒数
if (exponent < 0)
{
ret = 1.0 / ret;
}
return ret;
}
int main()
{
int m = 0;
int n = 0;
cout << " 请输入基数m和次数n:";
cin >> m >> n;
cout << "m的n次方为:" << Power(m, n) << endl;
system("pause");
return 0;
}运行的结果如下:
但是在代码的实现的时候,要考虑的东西很多
指数的范围,基数的范围,还有特殊的情况
代码实现如下:
#include<iostream>
using namespace std;
#include<assert.h>
double PowerWithUnsignedExpond(double base, size_t exponent)
{
if (exponent == 0)//指数为0的时候,直接返回1
{
return 1;
}
if (exponent == 0)//指数为0的时候,直接返回基数
{
return base;
}
//递归求解指数的一半,得到的数的平方就是当前的解
double ret = PowerWithUnsignedExpond(base, exponent >> 1);
ret = ret*ret;
if ((exponent & 0x1) == 1)
{
ret = ret*base;
}
return ret;
}
double Power(double base, int exponent)
{
assert(base != 0.0 || exponent >= 0);
//求出指数的绝对值
size_t absExponent = (size_t)(exponent);
//如果指数小于0,则将指数变成正值
if (exponent < 0)
{
absExponent = (size_t)(-exponent);
}
//递归求解
double ret = PowerWithUnsignedExpond(base, absExponent);
//如果指数小于0,求倒数
if (exponent < 0)
{
ret = 1.0 / ret;
}
return ret;
}
int main()
{
int m = 0;
int n = 0;
cout << " 请输入基数m和次数n:";
cin >> m >> n;
cout << "m的n次方为:" << Power(m, n) << endl;
system("pause");
return 0;
}运行的结果如下:
相关文章推荐
- 剑指Offer 面试题11:数的整数次方(Leetcode50. Pow(x, n))【C库函数pow模拟】题解
- 剑指Offer 面试题11:数的整数次方(Leetcode50. Pow(x, n))【C库函数pow模拟】题解
- 【c++】写一个函数,实现x的y次方
- 面试题11:实现函数 double Power(double base, int exponent)。求base的exponent的次方。不使用库函数。
- 【面试题】剑指Offer-11-模拟实现Pow
- 递归方式实现 1:打印一个整数的每一位 2:实现函数求出n的k次方
- 可变参数模拟printf()函数实现一个my_print()函数以及调用可变参数需注意的陷阱
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作
- 【面试题】C语言:实现一个函数,判断一个数是不是素数。
- c 结构体 & 函数指针模拟实现一个java class(类) 和方法
- 经典面试题:求数组的最大子序列和;实现函数 :判断一个自负喜欢是否是另一个字符串旋转所得;杨氏矩阵中查找一个数。
- 【C语言】【面试题】【笔试题】.字符串替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”。
- 【C语言】【面试题】【笔试题】.字符串替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”。
- 【面试题】C语言:模拟实现内存放置函数memset()
- C语言:模拟实现字符串中查找一个字符串my_strstr()函数
- Leecode Pow(x, n)实现任意次方函数
- 【C语言】【笔试题】【面试题】实现一个函数,可以左旋字符串中的k个字符
- 【C语言】【笔试题】【面试题】实现一个函数,可以左旋字符串中的k个字符
- 【C语言】【笔试题】【面试题】实现一个函数,可以左旋字符串中的k个字符
- 请实现一个反转32位有符号整数的函数,例如123—>321,-123->-321,120->21,如果溢出就返回0(面试题)