目录
概念定义
一: 幂
1.幂可以理解为是数字运算的结果。例如我们所的二的三次幂,二的四次幂等等,我们通常说二的三次幂是八,二的四次幂是十六,你看,这样对比一下是不是就可以更好的知道了幂是数字运算的结果。
2.nm我们叫做n的m次幂,或者n的m次方。当n为正数和负数的时候,分别代表着不同的计算方式。
1.pow()
那么计算一个数的n次方,我们难道每次都需要手动自己写出来吗?不需要。C语言给我们提供好了pow(a,b)
这个函数,代表着a的b次幂。
2. 两点注意
(1): 头文件
注意使用这个函数的时候,要记得加上头文件<math.h>
(2): 注意返回值
这个函数的返回值是double类型。
(3): 示例
#include <stdio.h>
#include <math.h>
int main()
{
int a = 2;
int b = 0;
double c = pow(a,b);
printf("%lf\n",c);
return 0;
}
运行结果
如图所示:
二: 对数
可以理解为是求n的m次幂的逆运算,类似于积分和微分一样。
三: 换底公式
l o g a b log_ab logab = = = l o g c b l o g c a \frac {log_cb}{log_ca} logcalogcb
在C语言中,我们要求以 a a a为底 b b b的对数,只需要将底换成2求解即可。
题目描述
给定一个整数 n n n,写一个函数来判断它是否是4的幂。如果是,返回true;否则,返回false.。整数 n n n是 4 4 4的幂次方需要满足:存在整数 x x x使得 n n n = = = 4 x 。 4^x。 4x。
解题思路 反复想一想就差不多会了
如果 n n n是 4 4 4的对数,那么一定会有 l o g 4 n = l o g 2 n l o g 2 4 = x log_4n=\frac{log_2n}{log_24}=x log4n=log24log2n=x 为整数。那么我们只要求出来这个x,然后计算4的n次方是否
在误差范围内
n想等即可。
这里提到了误差,是因为计算 4 4 4的 n n n次方需要使用 p o w ( a , b ) pow(a,b) pow(a,b)这个函数,而且刚才也提到,这个函数的返回值是double类型,要知道浮点数在我们计算机中是无法精确表示的,所以有误差
。
解题代码 代码虽短,可不要不敲哦
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d",&n);
if (0 == n)
{
printf("NO\n");
return 0;
}
int x;
x = (int)(log2(n)/log2(4) + 1e-8);//(1)
printf("%s\n",fabs(pow(4,x) - n) < 1e-8 ? "YES" : "NO");//(2)
return 0;
}
- 这里为啥要加上10-8呢?我个人认为是这样的 : : :log返回值是double类型,那么比如说返回结果是2.99999999999,如果我们没有加上10-8,那么强转成int类型的话,那么就直接变成2了,那么就会导致误差很大。所以加上这个10^-8应该是为了减小误差。
- 由于浮点数有精度的误差,那么需要和10-8比较一下,从而使得精度高一些,误差小一些。
写在最后
该文章内容是我阅读了CSDN博主英雄哪里出来
的博文后,自己记录的一些观点和想法,希望对大家有帮助。英雄哪里出来
的对应博文地址:传送门