【leetcode】504. 七进制数
给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。
示例 1:
输入: num = 100
输出: “202”
示例 2:
输入: num = -7
输出: “-10”
解题思路:
设置正负数标志位,标记最后输出结果需不需要加上负号
十进制转七进制
举例:
101:
101 % 7 = 3
101 / 7 = 14
14 % 7 = 0
14 / 7 = 2
2 % 7 = 2
7 / 7 = 1 //直到除以7等于1结束,2 % 7 = 2为个位对应的数
十进制转七进制最终的结果(从个位开始往高位写)为,203
代码:
C:
char * convertToBase7(int num){
if(num == 0) return "0";
int quotient = 0; //商
int remainder = 0; // 余数
bool negative = num < 0; //正负数标志位
num = abs(num);
// char res[32] = {'\0'};
char *res = (char *)malloc(sizeof(char) * 32); //动态分配内存
int i = 0;
while(num)
{
remainder = num % 7;
num = num / 7;
res[i++] = remainder + '0';
}
if(negative) res[i++] = '-'; //负数加上'-'
for(int m = 0, n = i - 1; m < n; m++, n--) //对res反转
{
char c = res[m];
res[m] = res[n];
res[n] = c;
}
res[i] = '\0'; //字符串结束标识符
printf("%s", res);
return res;
}
备注:
// char res[32] = {'\0'};
char *res = (char *)malloc(sizeof(char) * 32); //动态分配内存
该处用malloc分配内存,运行可以正常返回结果,但定义字符串数组char res[32] = {‘\0’}; 最终res返回NULL,没有明白为什么
拓展:
一. -1 转换成二进制数
32位 11111111 11111111 11111111 11111111
16位 11111111 11111111
8位 11111111
4位 1111