方法一
思路:
- 如果是负数转换为整数,最后在计算结果的时候添加负号到最前面
- 计算每一个七进制位并加入到结果切片中
- 将结果切片反转
- 反转后的切片返回字符串,如果是负数还要在最前方拼接一个负号
func convertToBase7(num int) string {if num == 0 {return "0"}//使用一个变量保存正负flag := trueif num < 0 {flag = false//转变成正数num = -num}ret := []string{}//得到正数的字符串for num != 0 { //直到除数变为0ret = append(ret, strconv.Itoa(num%7))num /= 7}//反转ret数组for i := 0; i < len(ret) >> 1; i++ {ret[i], ret[len(ret)-1-i] = ret[len(ret)-1-i], ret[i]}if !flag {//然后如果是负数前面加一个负号,否则直接输出return "-" + strings.Join(ret,"")}return strings.Join(ret,"")}
方法二
优化:
- 如果是负数我们不用分开判断
循环每一位的时候前面我们都要乘以10表示个位,十位等等,然后对每一位乘以自己的那一位的10的个数之后再求和,然后返回我们的结果
func convertToBase7(num int) string { sum := 0 bit := 1 for num != 0 { sum += (num%7)*bit bit *= 10 num /= 7 } return strconv.Itoa(sum) }
