《算法零基础》第19讲:进制转换(1)入门

本文详细介绍了各种进制转换的方法,包括X进制转十进制、十进制转X进制,以及涉及到的具体编程实现,如二进制中1的个数、各位相加、二进制链表转整数、K进制数字总和等。通过实例代码解析,帮助读者理解并掌握这些基础算法。
摘要由CSDN通过智能技术生成

前言

原文章出自:《算法零基础100讲》(第19讲) 进制转换(一) - 入门

X进制 转 十进制

公式:
在这里插入图片描述

示例:
对于八进制数 0123
在这里插入图片描述

十进制 转 X进制数

注:图片来自:《算法零基础100讲》(第19讲) 进制转换(一) - 入门

在这里插入图片描述

剑指 Offer 15. 二进制中1的个数

原题链接:剑指 Offer 15. 二进制中1的个数

在这里插入图片描述

代码

与运算性质,分解出各个1,时间复杂度 O(log 2n)

int hammingWeight(uint32_t n)
{
    int count = 0;
    while (n)
    {
        count++;
        n &= (n - 1);
    }
    return count;
}

258. 各位相加

原题链接: 258. 各位相加

在这里插入图片描述

代码

int GetNum(int n)
{
    int ans = 0;
    while (n)
    {
        ans += (n % 10);
        n /= 10;
    }
    return ans;
}

int addDigits(int num)
{
    while (num > 9)
    {
        num = GetNum(num);
    }
    return num;
}

1290. 二进制链表转整数

原题链接:1290. 二进制链表转整数

在这里插入图片描述

代码



int getDecimalValue(struct ListNode* head)
{
    if (NULL == head) return 0;

    int ans = 0;
    struct ListNode* p = head;

    while (p != NULL)
    {
        ans = ans * 2 + p->val;
        p = p->next;
    }

    return ans;
}

1837. K 进制表示下的各位数字总和

原题链接: 1837. K 进制表示下的各位数字总和

在这里插入图片描述

代码

int sumBase(int n, int k)
{
    int ans = 0;
    while (n)
    {
        ans += (n % k);
        n /= k;
    }
    return ans;
}

504. 七进制数

原题链接: 504. 七进制数

在这里插入图片描述

代码


char* convertToBase7(int num)
{
    if (num == 0)
        return "0";
    
    char* ans = (char*)calloc(12,sizeof(char));
    if (num < 0)
        strcat(ans, "-");
    
    num = abs(num);

    char ar[12] = {0};

    int i = -1;
    while (num > 0)
    {
        ar[++i] = (char)(num % 7 + '0');
        num /= 7;
    }

    for (i; i >= 0; --i)
    {
        strncat(ans, ar + i, 1);
    }

    return ans;
}

405. 数字转换为十六进制数

原题链接:405. 数字转换为十六进制数

在这里插入图片描述

代码

char * toHex(int num)
{
    char* hash = {"0123456789abcdef"};
    char* ans = (char*)malloc(sizeof(char) * 9);
    ans[8] = 0;
    int size = 8;
    
    do
    {
        ans[--size] = hash[num & 0xf];
        num = (unsigned)num >> 4;
    }while (num);

    return ans + size;
}

课后习题

1399. 统计最大组的数目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_索伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值