《算法基础学习》进制转换(入门)

简介: 算法学习《算法零基础100讲》(第19讲) 进制转换(一) - 入门_英雄哪里出来-CSDN博客https://blog.csdn.net/WhereIsHeroFrom/article/details/120875977习题解题报告

例题1


题目描述:


45.png

  • 解题思路:

比较基础,取余和除法的使用


  • 参考代码:


nt hammingWeight(uint32_t n) {
    int i,cnt=0;
    while(n)
    {
        if(n%2==1)
        cnt++;
        n/=2;
    }
    return cnt;
}


例题2

题目描述:

46.png


解题思路:

对于一般来说使用循环便可以解决


如果是进阶来说,便需要一点数学思想:


这里我们让一个三位数表示成xyz,那么就有x*100+y*10+z=x*99+y*9+x+y+z


要得到x+y+z则整体%9


这个题得到的结果一定为0-9,如果%9的话结果为0-8,那么先拆出一个1再加上1:


(x*99+y*9+x+y+z+1-1)%9=(x+y+z-1)%9+1%9=(x+y+z-1)%9+1


参考代码:


int addDigits(int num){
    return (num-1)%9+1;
}


例题3


题目描述:

47.png


  • 解题思路:


链表的遍历+进制的思想


  • 参考代码:
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
int getDecimalValue(struct ListNode* head){
    int ret=0;
    struct ListNode*cur=head;
    while(cur)
    {
        ret=ret*2+cur->val;
        cur=cur->next;
    }
    return ret;
}



例题4


题目描述:


48.png


  • 解题思路:

进制转换+各数求和(取余和除法)

  • 参考代码:
int sumBase(int n, int k){
    int ret=0;
    while(n)
    {
        ret=ret*10+n%k;
        n/=k;
    }//得到的数是反过来的,不过并不碍事
    int ans=0;
    while(ret)//简单求各位数和
    {
        ans+=ret%10;
        ret/=10;
    }
    return ans;
}


例题5

题目描述:


49.png


  • 解题思路:


对于各数和的数用标记数组记录,同时记录最大个数,再遍历计数


  • 参考代码:


int countLargestGroup(int n){
    int book[50]={0};//标记各数和数组(各数和有范围)
    int max=0;//记录最大个个数
    int i;
    for(i=1;i<=n;i++)
    {
        int sum=0;
        int tmp=i;
        while(tmp)//各数和
        {
            sum+=tmp%10;
            tmp/=10;
        }
        book[sum]++;//标记和的个数
        if(book[sum]>max)//标记最大
            max=book[sum];
    }
    int cnt=0;//遍历计数
    for(i=1;i<50;i++)
    {
        if(book[i]==max)
        cnt++;
    }
    return cnt;
}



例题6


题目描述:


50.png


  • 解题思路:


算法学习中已经讲解过了


  • 参考代码:


char * convertToBase7(int num){
    char*ret=(char*)malloc(sizeof(char)*20);
    int stack[20]={0},top=0;//数组栈
    int retsize=0;
    if(num<0)//正负号
    {
        ret[retsize++]='-';
        num=-num;
    }
    if(num==0)//特殊情况
    {
        return "0";
    }
    else
    {
        while(num)//反向储存进制数
        {
            stack[top++]=num%7;
            num/=7;
        }
    }
    while(top--)
    {
        ret[retsize++]=stack[top]+'0';//反向转化
    }
    ret[retsize]='\0';//结束符
    return ret;
}


例题7


题目描述:


51.png


  • 解题思路:


再上题基础上再变化一下就可以了


  • 参考代码:


char * toHex(int num){
    char*ret=(char*)malloc(sizeof(char)*20);
    int stack[20]={0},top=0;//数组栈
    int retsize=0;
    unsigned int n=num;//补码运算
    if(n==0)//特殊情况
    {
        return "0";
    }
    else
    {
        while(n)//反向储存进制数
        {
            stack[top++]=n%16;
            n/=16;
        }
    }
    while(top--)
    {
        if(stack[top]>=10)
        {
            ret[retsize++]=stack[top]-10+'a';
        }
        else
        {
            ret[retsize++]=stack[top]+'0';//反向转化
        }
    }
    ret[retsize]='\0';//结束符
    return ret;
}



相关文章
|
1月前
|
机器学习/深度学习 存储 缓存
数据结构从入门到精通——算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度是评估算法性能的两个重要指标。时间复杂度主要关注算法执行过程中所需的时间随输入规模的变化情况,而空间复杂度则关注算法执行过程中所需的最大存储空间或内存空间。
71 0
|
1月前
|
搜索推荐 算法 C语言
C语言选择排序算法,从入门到精通只需1秒!
C语言选择排序算法,从入门到精通只需1秒!
|
1天前
|
算法 索引
数据结构与算法-最小生成树入门
数据结构与算法-最小生成树入门
6 0
|
1天前
|
算法
数据结构与算法-AVL树入门
数据结构与算法-AVL树入门
5 0
|
1天前
|
算法 索引
数据结构与算法-三种队列基础入门
数据结构与算法-三种队列基础入门
5 0
|
10天前
|
机器学习/深度学习 算法 前端开发
Scikit-learn进阶:探索集成学习算法
【4月更文挑战第17天】本文介绍了Scikit-learn中的集成学习算法,包括Bagging(如RandomForest)、Boosting(AdaBoost、GradientBoosting)和Stacking。通过结合多个学习器,集成学习能提高模型性能,减少偏差和方差。文中展示了如何使用Scikit-learn实现这些算法,并提供示例代码,帮助读者理解和应用集成学习提升模型预测准确性。
|
10天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
20 0
|
17天前
|
算法
【算法学习--字符串】(不含KMP算法)
【算法学习--字符串】(不含KMP算法)
|
28天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
33 0
|
1月前
|
存储 算法 JavaScript
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(二)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
28 0