C语言--求x的y次方【详细解释+代码优化】

news2024/11/22 16:28:33


一.利用库函数pow🍗

pow函数的原型为:

double pow(double base, double exponent);

base为底数,exponent为指数,传入两个参数,返回值是计算的结果。需要引用头文件#include<math,h>.

//方法一:利用pow函数
int main()
{
	double x, y;
	double ret = 1;
	printf("请输入两个数字 :");
	scanf("%lf %lf", &x, &y);
	ret = pow(x, y);
	printf("%lf", ret);
	return 0;

 }

运行结果


二.自己实现mypow函数🍗

利用一个for循环,一直乘n次即可,值得注意的是负号问题,如果指数是符号,我们需要先把它转为正号,然后再写。还有注意指数和底如果为0的话需要单独拿出来讨论。

#define _CRT_SECURE_NO_WARNINGS//这一句必须放在第一行
#include <stdio.h>
#include <math.h>
//方法二:自己实现(未优化)
double Mypow(double x, double n)
{
	if (x == 0)
		return 0;
	if (n == 0)
		return 1;
	int flg = 1;
	double tmp=1;
	if (n < 0)
	{
		flg = -1;//作为标记
		n = -n;
	}
	for (int i = 1;i <= n;i++)
	{
		tmp *= x;
	}
	return (flg == 1) ? tmp : 1 / tmp;//标记为1表示指数为正,为-1则表示指数为负
}
int main()
{
	double x, n;
	printf("请输入两个数字 :");
	scanf("%lf %lf", &x, &n);
	double ret = Mypow(x, n);
	printf("%lf", ret);
}

运行结果


 三.自己实现mypow函数(代码优化)🍗

力扣中有一个题目就是让我们自己实现mypow函数,我们先把上面的代码放到力扣中看看是什么样子。

 点击运行之后,测试用例都通过了,但是点击提交后...

 显示超出时间限制,说当x=0.00001,n=2147483647时,测试通不过。

接下来我们来看一下代码是如何进行优化的

 这样就不需要乘以n次,而只需要乘logn,时间复杂度变为logn。

#define _CRT_SECURE_NO_WARNINGS//这一句必须放在第一行
#include <stdio.h>
#include <math.h>
//优化后的代码
double Pow(double x, long long y)//x!=0,y>=0
{
	if (y == 0)
		return 1;
	double tmp = Pow(x, y / 2);
	if (y % 2 != 0)//奇数
		return tmp * tmp * x;
	else//偶数
		return tmp * tmp;
}

double Mypow(double x, long long n) 
{
	long long y = n;
	if (x == 0)
		return 0;
	if (n == 0)
		return 1;
	int flg = 1;
	if (n < 0)
	{
		flg = -1;
		y = -(long long)n;
	}
	double tmp = Pow(x, y);
	return (flg == 1) ? tmp : 1 / tmp;
}
int main()
{
	double x;
	long long n;
	printf("请输入两个数字 :");
	scanf("%lf %lld", &x, &n);
	double ret = Mypow(x, n);
	printf("%lf", ret);
}

运行结果

 放在力扣中

 现在的代码就编译通过了。


今天的分享就到这里啦!🍗喜欢的小伙伴们可以给一个免费的赞表示对博主的支持🍗,你们的支持就是我创作的最大动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1266015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ST53xx 系列是一种高精度、高输入电压、低静态电流、高速度、低压差线性稳压器

ST53xxS/T 40V&#xff0c;低静态电流&#xff0c;高可靠性 LDO 概述&#xff1a; ST53xx 系列是一种高精度、高输入电压、低静态电流、高速度、低压差线性稳压器&#xff0c;具有高纹波抑制能力。在 Vour 5V VIN 7V 时&#xff0c;输入电压高达40V&#xff0c;负载电流高达300…

近五年—中国十大科技进展(2018年—2022年)

近五年—中国十大科技进展&#xff08;2018-2022&#xff09; 2022年中国十大科技进展1. 中国天眼FAST取得系列重要进展2. 中国空间站完成在轨建造并取得一系列重大进展3. 我国科学家发现玉米和水稻增产关键基因4. 科学家首次发现并证实玻色子奇异金属5. 我国科学家将二氧化碳人…

运算放大器(五):V-I 转换器

1、高侧电压至电流&#xff08;V-I&#xff09;转换器 下图显示的电路是高侧电压至电流(V-I) 转换器。可将 0 V 至 2V 的输入电压转换为 0mA 至 100mA 的输出电流 其测量转换函数如下图所示&#xff1a; 可利用该电路搭建恒流源电路&#xff0c;如下图仿真电路所示&#xff08…

【esp32】可变时间的定时器中断的开启和关闭

前言 回忆若能下酒&#xff0c;往事便可作一场宿醉。醒来时&#xff0c;天依旧清亮&#xff0c;风仍然分明&#xff0c;而光阴的两岸&#xff0c;终究无法以一苇杭之。我知你心意。无须更多言语&#xff0c;我必与你相忘于江湖&#xff0c;以沧桑为饮&#xff0c;年华果腹&…

vue.draggable拖拽——岗位切换如何判断?

有一个业务场景&#xff1a;把一个单位的某个岗位的人&#xff0c;从某某市A岗位调离出来后&#xff0c;又拖拽回去&#xff0c;如果是回到某某市A岗位&#xff0c;则没有变化&#xff0c;若是换了岗位&#xff0c;则会把色块变成红色&#xff0c;表示岗位的变化。 方法一&…

Linux 调试工具:gdb

调试复习 调试可谓是 “贯穿” 了程序员的一生&#xff0c;调试的重要性&#xff0c;就不再赘述啦&#xff01;如果你还不知道什么是调试&#xff0c;可以看看 Windows 系统的 Visual Studio 是如何调试的&#xff1a;➡️ visual stuudio 使用调试技巧 下载调试软件 gdb yu…

常用的系统播放器——MediaPlayer生命周期

常用的系统播放器——MediaPlayer 状态图以及生命周期 Idle状态、End状态、Error状态 MediaPlayer创建实例或者调用reset&#xff08;&#xff09;后就处于Idle状态&#xff0c;即就绪。 任意时刻调用release&#xff08;&#xff09;就会进入End 当运行过程中出错&#xf…

【力扣】189. 轮转数组

【力扣】189. 轮转数组 文章目录 【力扣】189. 轮转数组1. 题目介绍2. 解法2.1 方法一&#xff1a;不太正规&#xff0c;但是简单2.2 方法二&#xff1a;使用额外的数组2.3 方法三&#xff1a;环状替换2.4 方法四&#xff1a;数组翻转 3. Danger参考 1. 题目介绍 给定一个整数…

根据端口查找进程

关闭kibana kibana自带命令 kibana没有提供关闭命令&#xff0c;通过命令 ps -ef|grep kibana查找不到kibana相关的信息。 可以通过进程暴露的端口来查找 netstat -anltp|grep 5601获取到进程号&#xff0c;然后kill掉进程 kill -9 进程号Docker管理Kibana 但是如果使用D…

【开题报告】基于卷积神经网络的图像脑部MRI图像分割

论文题目 基于卷积神经网络的图像脑部MRI图像分割 一、选题意义 1.课题研究的目的和意义 1.1选题目的 脑部疾病是高致残致死率的疾病之一&#xff0c;对人们的生活质量和生命安全都有着十分重大的影响&#xff0c;所以各个国家都开始对脑部疾病的研究重视起来。帕金森、脑胶质…

SpringBoot+网易邮箱登录注册

文章目录 SpringBoot网易邮箱登录注册pom.xmlapplication.ymlsqlUserEmail.javaUserEmailMapper.javaUserEmailMapper.xmlEmailService.javaUserEmailService.javaUserEmailServiceImpl.javaUserEmailController.javaregister1.html 编写前参考 SpringBoot网易邮箱登录注册 po…

webpack如何设置兼容浏览器的范围​browserslist

Browserslist 是前端工程化不可或缺的工具&#xff0c;无论是处理 js 的 babel 还是处理 css 的 postcss&#xff0c;他们背后都有Browserslist 的身影。 一、如何查看查看所有浏览器和它的市场占有率 我们如何知道现在的浏览器那些被废弃、那些市场占有率高&#xff0c;可以…

第13关 解决K8s中Ingress Nginx控制器无法获取真实客户端IP的问题

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维。 这节课带大家探索并分享最全面的解决在使用Kubernetes&#xff08;K8s&#xff09;和Ingress-Nginx-Controller中无法获取客户端真实IP问题的视频教程&#xff0c;帮助你快速理解并解决这一问…

SpringBoot项目整合Redis,Rabbitmq发送、消费、存储邮件

&#x1f4d1;前言 本文主要是【Rabbitmq】——SpringBoot项目整合Redis&#xff0c;Rabbitmq发送、消费、存储邮件的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页…

一起学docker系列之十四Dockerfile微服务实践

目录 1 前言2 创建微服务模块2.1 **创建项目模块**2.2 **编写业务代码** 3 编写 Dockerfile4 构建 Docker 镜像5 运行 Docker 容器6 测试微服务7 总结8 参考地址 1 前言 微服务架构已经成为现代软件开发中的一种重要方式。而 Docker 提供了一种轻量级、便携式的容器化解决方案…

贵州乾辰谷材 以科技创新引领绝缘材料领域的新发展

贵州乾辰谷材科技有限公司&#xff0c;这家于2018年10月18日成立的贵州本地企业&#xff0c;已经在绝缘材料领域崭露头角。乾辰谷材不仅在成立短短几年内实现了快速成长&#xff0c;更以其科技创新能力和卓越产品性能赢得了业界和用户的广泛赞誉。 乾辰谷材的创始人王金斗先生&…

RFID资产管理系统全功能详解!高效管理从这里开始!

在现代商业环境中&#xff0c;RFID资产管理系统正成为企业管理不可或缺的先进工具。现代企业管理正处于数字化的浪潮中&#xff0c;而RFID资产管理系统正是这场浪潮中的一颗璀璨明珠。在这篇文章中&#xff0c;我们将全方位解析RFID资产管理系统的功能&#xff0c;助您深入了解…

Vue框架学习笔记——绑定class样式和绑定style样式

文章目录 前文提要class样式的三种绑定方法&#xff08;图片来自参考链接&#xff09;style样式&#xff08;内联形式&#xff09;总结 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 主要学习链接&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从…

redis运维(二十二)redis 的扩展应用 lua(四)

一 最佳实践 ① 铺垫 最佳实践&#xff1a;1、把redis操作所需的key通过KEYS进行参数传递2、其它的lua脚本所需的参数通过ARGV进行传递. redis lua脚本原理 Redis Lua脚本的执行原理 ② 删除指定的脚本缓存 ③ redis集群模式下使用lua脚本注意事项 1、常见报错现象 C…

超卓航科聚国内外专家学者,共推冷喷涂技术的发展与应用

11月24日——26日&#xff0c;冷喷涂技术及其在增材制造中的应用专题会在襄阳召开&#xff0c;来自国内外200多名科技工作者齐聚一堂&#xff0c;共同交流冷喷涂技术的研究与应用。 本次专题研讨会由中国机械工程学会表面工程分会主办&#xff0c;湖北超卓航空科技股份有限公司…