【每日一题】——负二进制转换

博客主页:PH_modest的博客主页
当前专栏:每日一题
其他专栏:
每日反刍
读书笔记
C语言跬步积累
座右铭:广积粮,缓称王!

一.题目描述

【每日一题】——负二进制转换_第1张图片
题目链接:1017.负二进制转换 - 力扣(LeetCode)

二.思路分析

思路和二进制转换一样,都是除基取余,倒序排列,不过这题需要注意符号。
即先取模判断能否整除基数,能的话赋值为0,不能就赋值为1,然后将该数再除以这个基数,本题需要用到绝对值函数abs()

三.代码展示

char * baseNeg2(int n)
{
    char* arr=(char*)malloc(sizeof(char)*100);
    char* ret=(char*)malloc(sizeof(char)*100);
    int i=0;
    int j=0;
    int r=0;
    if(n==0)
    {
        arr[i++]='0';
        arr[i]='\0';
        return arr;
    }
    while(n)
    {
        if(abs(n)%2==0)
        {
            arr[i++]='0';
            n=-(n/2);
        }
        else
        {
            arr[i++]='1';
            n=-((n-1)/2);
        }
    }
    arr[i]='\0';
    r=i;
    for(j=0;j<i;j++)
    {
        ret[j]=arr[--r];
    }
    ret[j] = '\0';
    return ret;
}

最后:

每日一题系列旨在养成刷题的习惯,所以对代码的解释并不会特别详细,但足够引导大家写出来,选的题目都不会特别难,但也不是特别简单,比较考验大家的基础和应用能力,我希望能够将这个系列一直写下去,也希望大家能够和我一起坚持每天写代码。

在这里送大家一句话:广积粮,缓称王!

你可能感兴趣的:(每日一题,算法,c语言,学习)