本文主要是介绍人生得意须尽欢,莫使金樽空对月。数值的整数次方,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
链接:https://www.nowcoder.com/questionTerminal/1a834e5e3e1a4b7ba251417554e07c00
来源:牛客网
[编程题]数值的整数次方.
热度指数:614061时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
解题思路
一、利用库函数
#include< math.h >C 库函数 double pow(double x, double y) 返回 x 的 y 次幂,即 xy。
完整的代码
class Solution {
public:double Power(double base, int exponent) {return pow(base, exponent);}
};
结果
二、暴力法
直接进行计算,如果exponent为正数直接计算,如果为负数1 / 结果
完整代码如下
class Solution {
public:double Power(double base, int exponent) {// 前置结果设为1.0,即当exponent=0 的时候,就是这个结果double result = 1.0;// 获取指数的绝对值int e = exponent > 0 ? exponent : -exponent;// 根据指数大小,循环累乘for(int i = 1 ; i <= e; i ++){result *= base;}// 根据指数正负,返回结果return exponent > 0 ? result : 1 / result;}
};
结果图
三、二分法
1、exponent是正数。那么递归式如下:
如果exponent是偶数,Power(base, exponent) = Power(base, exponent / 2) * Power(base, exponent / 2)
如果exponent是奇数,Power(base, exponent) = base * Power(base, exponent / 2) * Power(base, exponent / 2)
2、负指数exponent的情况,取其绝对值先计算。将最后结果取倒数即可。
完整代码
class Solution {
public:double Power(double base, int exponent) {bool x = false;if(exponent < 0){exponent = -exponent;x = true;}double result = GetPower(base, exponent);return x ? 1/result : result;}double GetPower(double base, int exponent){if(exponent == 0){return 1;}if(exponent == 1){return base;}double ans = GetPower(base, exponent >>1);ans *= ans;if(exponent & 1 == 1){ans *= base;}return ans;}
};
运行结果
这篇关于人生得意须尽欢,莫使金樽空对月。数值的整数次方的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!