幂和对数
跟英雄哥学习算法的过程收获是很多的,以下我将写出我的体会,感想,错误《算法零基础100讲》(第1讲) 幂和对数_英雄哪里出来-CSDN博客
在c语言中,我们可以利用函数log2(T)来计算以二为底的对数,log10(T)来计算以10为底T的对数。前提是要调用math.h数学库。
也需要用到数学知识(换底公式)log(a)(b)=log(c)(b)/log(c)(a)
而在c语言中我们需要写成log2(b)/log2(a)
接下来就是题了,也算是我的解题报告
231. 2 的幂 - 力扣(LeetCode) (leetcode-cn.com)
(34条消息) ☀️光天化日学C语言☀️(25)- 浮点数的精度问题 | 浮点数判等千万不要写成 a == b_英雄哪里出来-CSDN博客
我们的目的是判断给出的整数是否是2的幂,需要注意的地方就是精度问题,因为sqrt,pow函数的返回值都是浮点数,所以难免有误差,浮点数的判断方法:两数相减的绝对值小于某一精度,如果小于该精度,则返回true,否则返回false。
#include//这里我用acm模式打 using namespace std; bool isPowerOfTwo(int n) { if(n<=0) return false; int x=(int)(log2(n)+1e-8);//在判断 n == 2^x 时,因为 pow(2, x) 返回值是一个double类型的浮点数,所以不能直接用 == 来判断,浮点数的判断方法:两数相减的绝对值小于某一精度,如果小于该精度,则返回true,否则返回false if(fabs((n-pow(2,x)))<1e-8)//为了防止丢失精度所以加1e-8 { return true; } else return false; } int main() { int n; cin>>n; printf("%d",isPowerOfTwo(n));//如果是2的幂则将返回真(1),否则为假(0) return 0; }
326. 3的幂 - 力扣(LeetCode) (leetcode-cn.com)
一样的
#include//这里我用acm模式打 using namespace std; bool isPowerOfTwo(int n) { if(n<=0) return false; int x=(int)(log2(n)/log2(3)+1e-8);//在判断 n == 3^x 时,因为 pow(3, x) 返回值是一个double类型的浮点数,所以不能直接用 == 来判断,浮点数的判断方法:两数相减的绝对值小于某一精度,如果小于该精度,则返回true,否则返回false if(fabs((n-pow(3,x)))<1e-8)//为了防止丢失精度所以加1e-8 { return true; } else return false; } int main() { int n; cin>>n; printf("%d",isPowerOfTwo(n));//如果是2的幂则将返回真(1),否则为假(0) return 0; }
342. 4的幂 - 力扣(LeetCode) (leetcode-cn.com)
#include//这里我用acm模式打 using namespace std; bool isPowerOfTwo(int n) { if(n<=0) return false; int x=(int)(log2(n)/log2(4)+1e-8);//在判断 n == 4^x 时,因为 pow(4, x) 返回值是一个double类型的浮点数,所以不能直接用 == 来判断,浮点数的判断方法:两数相减的绝对值小于某一精度,如果小于该精度,则返回true,否则返回false if(fabs((n-pow(4,x)))<1e-8)//为了防止丢失精度所以加1e-8 { return true; } else return false; } int main() { int n; cin>>n; printf("%d",isPowerOfTwo(n));//如果是2的幂则将返回真(1),否则为假(0) return 0; }



