一、题目:
链接:
504. 七进制数 - 力扣(LeetCode)
函数原型:
char* convertToBase7(int num)
二、思路
本题要将十进制数转换为二进制数,只要将十进制num数模7再除7,直到num等于0
每次将模7的结果存储到字符串ans中,存储完后字符串末尾还要加上 '\0' ,由于是逆序存储,因此存储完后需要逆置字符串。
如何将数字转换为字符,请看博客:字符与数字的相互转换_字符和数字之间的转换-CSDN博客
还需要注意,如果num为负数,先将其当作正数去转换,最后在字符串ans末尾加上字符 ‘-’ 即可。
三、代码:
void reserve(char* str)//逆置字符串函数 { int len = strlen(str); int left = 0; int right = len - 1; while (left <= right) { char tmp = str[left]; str[left] = str[right]; str[right] = tmp; left++; right--; } } char* convertToBase7(int num) { if(num==0)//对于num为0的情况,直接返回"0"即可 { return "0"; } char* ans = (char*)calloc(32, sizeof(char));//申请一块空间,存放字符串 if (ans == NULL)//判断是否申请成功 { perror("malloc fail"); exit(-1); } int i = 0;//下标 int Num = abs(num);//取num的绝对值 while (Num > 0) { ans[i++] = Num % 7 + '0';//将num取模的结果存储到字符串ans中 Num = Num / 7;//num除7 } if (num < 0)//num为负数 { ans[i++] = '-';//需要在字符串末尾加上负号 ans[i] = '\0';//字符串末尾加上结束标志\0 } else//num为整数 { ans[i] = '\0';//字符串末尾加上结束标志\0 } reserve(ans);//逆置字符串ans return ans;//返回ans }