求实数的整数次幂(循环版)(高效)(位运算解题)
创始人
2024-02-04 16:03:53

求实数的整数次幂(循环版)(高效) (10 分)

原理图
在这里插入图片描述

请编写函数,用循环语句以最快的方法求任意实数的任意整数次幂。
函数原型

double Power(double x, int n);

说明:参数 x 为底数,n 为指数。若参数正确,则函数值为 x 的 n 次幂。若参数不正确(当底数为 0 且指数为 0 或负数时无意义),则报告错误,函数值为0。

提示:
指数 二进制 公式
1 0001 x=x
2 0010 x?2??=x?2??
3 0011 x?3??=x?x?2??
4 0100 x?4??=x?4??
5 0101 x?5??=x?x?4??
6 0110 x?6??=x?2???x?4??
7 0111 x?7??=x?x?2???x?4??
8 1000 x?8??=x?8??
9 1001 x?9??=x?x?8??
10 1010 x?10??=x?2???x?8??
11 1011 x?11??=x?x?2???x?8??
12 1100 x?12??=x?4???x?8??
13 1101 x?13??=x?x?4???x?8??
14 1110 x?14??=x?2???x?4???x?8??
15 1111 x?15??=x?x?2???x?4???x?8??

要求:不得调用 pow 函数,不得使用递归方法。
*/

// 这个位运算是大部分都不熟悉也不敢用的东西,但是确实是编程里面的一个非常重要的工具

#include 
#include double Power(double x, int n);int main()
{double x;int n;scanf("%lg %d", &x, &n);printf("%g\n", Power(x, n));return 0;
}// 这个函数的原理就是吧指数转化为二进制,例如15,它的二进制就是1111,把每一个二进制数分开来看就是1000 + 100 + 10 + 1
// 转化为十进制就是8 + 4 + 2 + 1,当然计算的时候这个先后顺序是倒过来的1 + 2 + 4 + 8
// 然后这个循环次数就是4次原来的循环次数是15次,时间复杂度重O(n) 变成了O(log2 n),速度就是大幅度提高了 
double Power(double x, int n)  // 记住一定要double不然int再大都不够
{double s = 1.0, p = x;  // 这个s = 1.0必须这么写, 最开始p = x也没什么好说的, int k = n; if(0 == x)     // 这个条件没什么好说的 { if(n <= 0)		// 增强代码的健壮性,包含了底数为0的时候,指数小于等于0的情况 {s = 0.0;printf("不正确的参数!\n");}else{s = 0.0;}}else if(n > 0)   // 另外两种情况的讨论 // 首先我们要知道一个常识1的补码是00000001,所以和1进行&(与运算) 之后结果就是看最后一位// 原理很简单前面这个数字转化为二进制之后最后一位前面的不论是0还是1都会变成0,之后结果就只// 能看最后一位了,这就是这个题的一个关键 {while (k)	 // 循环k次就是 {if(k & 1)		// 进行与运行,看看是否s 是不是需要乘以p,例如指数为10,转化为二进制后位1010,可以分解为十进制2 + 8 // 真正运算的时候有两次是条件是成立的, {s *= p;}p *= p;			// 在没有成立的时候p *= p的作用就是让这个p的值满足下一次条件需要的值(不太好解释,feel) k >>= 1;		// 然后右移1位,k的十进制数字/2(取整),二进制数字例如1010变成0101 } }else if(n < 0){s = 1.0 / Power(x, -n);  // 题目说是没有用到递归但是为了争强题目的可读性,和简化代码还是用了点递归 }return s;
}

运行结果
在这里插入图片描述

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...