URL
题目
分析
源码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
static char zero[] = "0";
char * conver_to_base7(int src_num){
/* 1. num == 0 */
if (src_num == 0){
return zero;
}
/* 2. num != 0 */
/* 符号 */
bool negative = src_num < 0;
int num = abs(src_num);
/* 数值位 -> ASCII */
char *digits = (char *)malloc(sizeof(char) * 32);
int pos = 0;
while (num > 0) {
digits[pos++] = num % 7 + '0';
num /= 7;
}
/* 添加符号 or not */
if (negative){
digits[pos++] = '-';
}
/* 倒序 & 输出 */
for (int l = 0, r = pos - 1; l < r; l++ , r--){
char c = digits[l];
digits[l] = digits[r];
digits[r] = c;
}
digits[pos] = '\0';
return digits;
}
int main()
{
int num_1 = 100;
printf("before : %d\n",num_1 );
printf("after : \"202\" = \"%s\" ?\n", conver_to_base7(num_1) );
int num_2 = -7;
printf("before : %d\n",num_2 );
printf("after : \"-10\" = \"%s\" ?\n", conver_to_base7(num_2) );
return 0;
}
源码概述
- 判断正负号,记录并取绝对值计算
- 遍历并记录每个七进制数值位数值
- 添加正负号
- 倒序存储结果的字符串并return
小结
先处理符号,再处理数据