方法一

思路:

  1. 如果是负数转换为整数,最后在计算结果的时候添加负号到最前面
  2. 计算每一个七进制位并加入到结果切片中
  3. 将结果切片反转
  4. 反转后的切片返回字符串,如果是负数还要在最前方拼接一个负号
  1. func convertToBase7(num int) string {
  2. if num == 0 {
  3. return "0"
  4. }
  5. //使用一个变量保存正负
  6. flag := true
  7. if num < 0 {
  8. flag = false
  9. //转变成正数
  10. num = -num
  11. }
  12. ret := []string{}
  13. //得到正数的字符串
  14. for num != 0 { //直到除数变为0
  15. ret = append(ret, strconv.Itoa(num%7))
  16. num /= 7
  17. }
  18. //反转ret数组
  19. for i := 0; i < len(ret) >> 1; i++ {
  20. ret[i], ret[len(ret)-1-i] = ret[len(ret)-1-i], ret[i]
  21. }
  22. if !flag {
  23. //然后如果是负数前面加一个负号,否则直接输出
  24. return "-" + strings.Join(ret,"")
  25. }
  26. return strings.Join(ret,"")
  27. }

方法二

优化:

  1. 如果是负数我们不用分开判断
  2. 循环每一位的时候前面我们都要乘以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)
    }