栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

算法日记(二)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法日记(二)

幂和对数

跟英雄哥学习算法的过程收获是很多的,以下我将写出我的体会,感想,错误《算法零基础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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443686.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号