Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情
题目
描述
给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。
当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , 'B' 表示此位为 11 。
若 M 为负数,应在结果中保留负号。
数据范围:2≤N≤16
要求:空间复杂度O(M),时间复杂度 O(M)
示例1
输入:
7,2
返回值:
"111"
示例2
输入:
10,16
返回值:
"A"
备注:
M是32位整数,2<=N<=16.
AC Code
package main
/**
* 进制转换
* @param M int整型 给定整数
* @param N int整型 转换到的进制
* @return string字符串
*/
func solve( M int , N int ) string {
// write code here
(1) table := "0123456789ABCDEF"
(2) dataByte := []byte(table)
(3) var flag bool
(4) if M<0{
M = -M
flag = true
}
(5) result := ""
(6) for M > 0 {
(7) result = string(dataByte[M%N])+result
(8) M = M/N
}
(9) if M==0 && result==""{
(10) return result+"0"
}
(11) if flag {
(12) result = "-"+result
}
return result
}
- (1) 指定一个table,因为题目要求是到16进制就好了,所以我们可以直接这样
- (2) 将这个字符串转化成字节数组类型
- (3) 定义一个flag标识是否是负数
- (4) 如果这个数是负数,那么就让这个数先变成整数,然后再将这个flag变成正数
- (5) 定义存储结果result
- (6) 如果这个M>0的话就可以继续下去了
- (7) 结果就是每一次算出这个result,对这个N进行存取,在dataByte中找到这个对应的值。
- (8) 这个M等于这个M/对应转换的进制数
- (9) 如果这个M=0的话
- (10) 就返回0
- (11) 如果这个flag是true,就表示这个数是负数的话
- (12) 加上这个负号即可!