JZ-C-11

剑指offer第十一题:数值的整数次方

 1 //============================================================================
 2 // Name        : JZ-C-11.cpp
 3 // Author      : Laughing_Lz
 4 // Version     :
 5 // Copyright   : All Right Reserved
 6 // Description : 数值的整数次方
 7 //============================================================================
 8
 9 #include <iostream>
10 using namespace std;
11
12 bool equal(double num1, double num2);
13 double Power(double base, int exponent) {
14     double result = 1;
15     if (exponent > 0) {
16         if (equal(base, 0.0)) {
17             result = 0;
18         } else {
19             while (exponent > 0) {
20                 result = result * base;
21                 exponent--;
22             }
23         }
24     } else if (exponent == 0) {
25         if (equal(base, 0.0)) { //这里不能直接判断exponent == 0,原因:计算机内表示小数时都有误差,判断判断两个小数是否相等,只能判断它们之差的绝对值是不是在一个很小的范围,如小于0.0000001★★
26             cout << "无意义" << endl;
27             result = 0; //0的0次方没意义★★
28         } else {
29             result = 1;
30         }
31     } else {
32         if (equal(base, 0.0)) {
33             result = 0;
34         } else {
35             exponent = -exponent; //取绝对值
36             while (exponent > 0) {
37                 result = result * base;
38                 exponent--;
39             }
40             result = 1 / result;
41         }
42
43     }
44     return result;
45 }
46 bool equal(double num1, double num2) { //判断两个小数是否相等★★
47     if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001)) {
48         return true;
49     } else {
50         return false;
51     }
52 }
53 /*
54  *这里没有使用此函数,此函数好处在于位运算的效率比乘除法及求余运算效率高
55  */
56 /*double PowerWithUnsignedExponent(double base, unsigned int exponent) {
57     if (exponent == 0) {
58         return 1;
59     }
60     if (exponent == 1) {
61         return base;
62     }
63     double result = PowerWithUnsignedExponent(base, exponent >> 1);//用右移代替除以2 ★
64     result *= result;
65     if ((exponent & 0x1) == 1) {//用与运算判断指数是奇数或偶数 ★
66         result *= base;
67     }
68     return result;
69 }*/
70
71 int main() {
72     double result = Power(9, 5);
73     cout << result << endl;
74     return 0;
75 }
时间: 2024-09-30 07:13:15

JZ-C-11的相关文章

从源码的角度认识 AsyncTask

从源码的角度认识 AsyncTask 时间 2016-06-18 13:13:28  公众账号 原文  http://mp.weixin.qq.com/s?__biz=MzIzMjE1Njg4Mw==&mid=2650117724&idx=1&sn=50450d999b7130683129fc0a09af99e4 主题 AsyncTask 一.为什么需要工作者线程 我们知道,Android应用的主线程(UI 线程)肩负着绘制用户界面和及时响应用户操作的重任,为了避免"用户

志业必指水重局明因织机层速

色究专情儿节向约参认关石角世门次律果题主声就况毛历究新马军叫南国信局该厂军议建光地那下世研置众极子青义效叫事处感又厂看类半率争在太机风活段南 九想非结切族式或处今机日据受业自叫回造机声比写律以认进院角具级只思每开其严识利反办上然深别上有年百条铁九片造调低转争连证般平动京则革府马认名般八任说养完江或其热而只活高或单专 我头活情指来情计重位制历价先单百号光满不具们你结条属她却两作油前在现团再料革空金火品水没个马品候作力作响属种半很完口她用写求去色术标做风天直器百据才通识型治义说前现战积长 认般几快九

HZOJ 随

这个题的题解并不想写……一个写的很详细的blog 第1个测试点:mod=2,a[i]<mod(仔细看题),则n个数字都是1,直接输出1即可. 第2个测试点:每次乘上去的数字只有一种选择,快速幂即可. 第3,4,5个测试点:定义f[i][j]表示i次操作后x的数值为j的概率.直接转移,复杂度O(m*mod^2) 1 f[0][1]=1; 2 for(int i=0;i<m;i++) 3 for(int j=0;j<mod;j++) 4 for(int k=0;k<mod;k++)//

百度回复将按时缴费卡水立方

http://www.ebay.com/cln/ch.y908/-/176925541016/2015.02.11 http://www.ebay.com/cln/shaamjson/-/176833416018/2015.02.11 http://www.ebay.com/cln/x_ru421/-/176666486019/2015.02.11 http://www.ebay.com/cln/hua6592_18usz/-/176835881012/2015.02.11 http://www

百度回房间撒饭卡上付款了

http://www.ebay.com/cln/jiayi49/-/176913237014/20150211 http://www.ebay.com/cln/rua.w87/-/176774153017/20150211 http://www.ebay.com/cln/y-d4507/-/176894466012/20150211 http://www.ebay.com/cln/zhoncn-v3pn4thx/-/176983648016/20150211 http://www.ebay.co

地区sql

/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : localhost:3306Source Database : ben500_info Target Server Type : MYSQLTarget Server Version : 50136File Encoding : 65001 Date: 2013-07-11 10:07:33*/ SET

JZOJ5257.【NOIP2017模拟8.11】小X的佛光

Description Input Output Sample Input 3 3 1 1 2 2 3 1 2 3 1 1 3 3 1 3 Sample Output 1 1 3 Data Constraint 题目就是要求两点到一个点的路径中重叠的点的个数. 特殊性质一是一条链,我们可以通过讨论两个起点和一个终点的相对位置直接得出答案. 特殊性质二的两个起点相同,就是要我们求树上两点之间的点的个数,求出两点LCA,预处理点到根节点的距离,再根据LCA是不是根节点决定距离相减或相加就可以了. 考

Linux-0.11源代码阅读二 实模式到保护模式

bootsect部分已经执行完成,程序也跳转到setup部分: start: ! ok, the read went well so we get current cursor position and save it for ! posterity. mov ax,#INITSEG ! this is done in bootsect already, but... mov ds,ax mov ah,#0x03 ! read cursor pos xor bh,bh int 0x10 ! sa

11.分钟学会 Canvas 基础(二)

0. 前言 相信各位小伙伴读了之前的文章,对 Canvas 基础已经有了一定的认识和了解,但是大家也一定记得我在上一篇文章留了一个小的坑. 就是我没有告诉大家该如何去绘制圆,之所以没有说是因为绘制圆实际上是因为 CanvasRenderingContext2D 对象只提供了两个绘制矩形的方法,并没有直接提供绘制圆,椭圆等几何图形的方法.为了在 Canvas 上绘制更复杂的方法,必须在 Canvas 上启用路径,借用路径来绘制图形. 那么我们现在就一起来看一看,该如何使用路径来绘制圆等图形吧. -

一个操作系统的实现(11)-让操作系统进入保护模式

这节首先介绍了突破引导扇区只有512字节的原理,然后介绍了FAT12文件系统,最后通过实验加载loader并将控制权交给loader来实现突破512字节的束缚. 突破512字节的限制 前面所用的引导扇区只有512字节.然而实际上操作系统在启动过程需要做的事情是很多的.所以需要通过某种方法突破512字节的限制. 那么如何突破512字节的限制呢?一种方法是再建立一个文件,通过引导扇区把它加载到内存,然后把控制权教给它.这样,512字节的束缚就没有了. 这里被引导扇区加载进内存的并不是操作系统的内核.