剑指offer_发散思维---数值的整数次方

2023-12-24 11:48

本文主要是介绍剑指offer_发散思维---数值的整数次方,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

##题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
##解题思路
主要涉及完整性考虑,首先按照正数次幂,负数次幂,0次幂,三种分析,底数为0和非0。
1,第一种方式,常规做法
2,第二种方式,用递归的方法,效率提高
3,第三种方式,用快速幂的方法,可以实现递归的效果
##代码实现

/*** */
package 发散思维;/*** <p>* Title:Power* </p>* <p>* Description:* </p>* * @author 田茂林* @data 2017年8月25日 上午9:49:35*/
public class Power {/*** void* * @param args*/public static void main(String[] args) {System.out.println(DouPowerSuperMax(-2.0, -3));}// ==================================================================常规方法public static double DouPower(double base, int exponent) {if (base == 0) {return 0;}if (exponent > 0) { // 正数次幂double result = 1;for (int i = 1; i <= exponent; i++) {result *= base;}System.out.println(result);return result;} else if (exponent < 0) {double result = 1;for (int i = 1; i <= -exponent; i++) { // 负数次幂result *= base;}return 1 / result;} else { // 任何数的0次幂都是1return 1;}}// ==================================================================递归方式public static double DouPowerSuper(double base, int exponent) {if (exponent > 0) {return helper(base, exponent);} else {return 1.0 / helper(base, exponent);}}public static double helper(double base, int exponent) {if (exponent < 0) {exponent = -exponent;}if (exponent == 0) {return 1;}if (exponent == 1) {return base;}double result = helper(base, exponent >> 1); // 递归方式可以让指数成倍的增长,减少运算次数result *= result;if ((exponent & 1) == 1) {result *= base; // 如果是奇数,要多乘一次}return result;}// ==================================================================快速幂方式
/*** 1.全面考察指数的正负、底数是否为零等情况。* 2.写出指数的二进制表达,例如13表达为二进制1101。* 3.举例:10^1101 = 10^0001*10^0100*10^1000。* 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。*/public static double DouPowerSuperMax(double base, int exponent) {int flag = exponent;if (base == 0)return 0;if (exponent == 0) {return 1;}if (exponent < 0) {exponent = -exponent;}int res = 1;while (exponent != 0) {if ((exponent & 1) != 0) {res *= base;}base *= base;exponent = exponent >> 1;}return flag > 0 ? res : 1.0 / res;}}

这篇关于剑指offer_发散思维---数值的整数次方的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/531665

相关文章

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

颠覆你的开发模式:敏捷思维带来的无限可能

敏捷软件开发作为现代软件工程的重要方法论,强调快速响应变化和持续交付价值。通过灵活的开发模式和高效的团队协作,敏捷方法在应对动态变化和不确定性方面表现出色。本文将结合学习和分析,探讨系统变化对敏捷开发的影响、业务与技术的对齐以及敏捷方法如何在产品开发过程中处理持续变化和迭代。 系统变化对敏捷软件开发的影响 在敏捷软件开发中,系统变化的管理至关重要。系统变化可以是需求的改变、技术的升级、

单精度浮点数按存储格式转为整数的程序

///#include<cstdio>//-----------------union int_char{unsigned char ch[4];float i;};void out_put(union int_char x)//x86是小端对其模式,即最数据的最低位存储在地址的最低位上。{printf("单精度浮点数值为:%f\n",x.i,x.i);printf("存储位置从左到右

20190315 把整理和培养自己当作一生的事业,而不是局限在找工作拿offer。

把整理和培养自己当作一生的事业,而不是局限在找工作拿offer,做有本事的人。 来东南读研半年了,明显感觉自己掌握的不过是书本知识级别的中上水平,垃圾收集器这些的只知道背面经,靠脑子硬记,缺乏整理和系统,一头浆糊。 现在一边做实训这个烂项目,一边刷面经,一边刷剑指offer,想投些大公司的实习,又觉得还没准备好,看着各 种面经,都能说个大概,但明显感觉到自己知识的不体系和不深入,**做的项目

交换两个变量数值的3种方法

前言:交换两个数值可不是"a = b,b = a"。这样做的话,a先等于了b的值;当“b = a”后,因为此时a已经等于b的值了,这个语句就相当于执行了b = b。最终的数值关系就成了a == b,b == b。 下面教给大家3种交换变量数值的方法: 目录 1. 中介法 2. 消和法 3. 异或法 4. 总结 1. 中介法 中介法(又称 临时变量法 或 酱油法),其中心

0906作业+思维导图梳理

一、作业: 1、创捷一个类似于qq登录的界面 1)源代码 #include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);//QPushbutton:登录、退出this->join = new QP

用异或交换两个整数的陷阱

前面我们谈到了,可用通过异或运算交换两个数,而不需要任何的中间变量。 如下面: void exchange(int &a, int &b) {     a ^= b;     b ^= a;     a ^= b; } 然而,这里面却存在着一个非常隐蔽的陷阱。 通常我们在对数组进行操作的时候,会交换数组中的两个元素,如exchang(&a[i], &b[j]),

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

[机缘参悟-222] - 系统的重构源于被动的痛苦、源于主动的精进、源于进化与演进(软件系统、思维方式、亲密关系、企业系统、商业价值链、中国社会、全球)

目录 前言:系统的重构源于被动的痛苦、源于主动的精进、源于进化与演进 一、软件系统的重构 1、重构的定义与目的 2、重构的时机与方法 3、重构的注意事项 4、重构的案例分析 二、大脑思维的重构 1、大脑思维重构的定义 2、大脑思维重构的方法 3、大脑思维重构的挑战与前景 三、认知的重构 1、定义 2、目的 3、方法 四、实例 五、总结 四、婚姻家庭的重构 1、婚