go语言实现36进制算法

36进制由0-9,a-z,共36个字符表示,最小为'0'
'0''9'对应十进制的09,'a''z'对应十进制的1035
例如:'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47
要求按照加法规则计算出任意两个36进制正整数的和
如:按照加法规则,计算'1b' + '2x' = '48'

要求:不允许把36进制数字整体转为10进制数字,计算出10进制数字的相加结果再转回为36进制

思路: 按照十进制的加法方法,满36向前进一位

GetInt:将’0’-‘9’映射到数字0-9,将’a’-'z’映射到数字10-35

package  main

import "fmt"

func GetInt(a uint8) int {
	if a-'0' > 0 && a <= '9' {
		return int(a - '0')
	} else {
		return int(a-'a') + 10
	}
}
func main(){
	fmt.Println(GetInt('b'))
}
$ go run test.go
35

36进制算法go实现:

package  main

import "fmt"

func GetInt(a uint8) int {
	if a-'0' > 0 && a <= '9' {
		return int(a - '0')
	} else {
		return int(a-'a') + 10
	}
}

func Add(str1 string, str2 string) string {
	List36 := []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
	i := len(str1) - 1
	j := len(str2) - 1
	var sum string
	var tem int //进位
	for i >= 0 && j >= 0 {
		s := GetInt(str1[i]) + GetInt(str2[j]) + tem
		if s >= 36 {
			tem = 1
			sum = List36[s%36]+sum
		} else {
			tem = 0
			sum = List36[s]+sum
		}
		i--
		j--
	}
	for i >= 0 {
		s:= GetInt(str1[i])+tem
		if s>=36{
			tem = 1
			sum =  List36[s%36]+sum
		}else {
			tem = 0
			sum =  List36[s]+sum
		}
		i--
	}
	for j >= 0 {
		s:= GetInt(str2[i])+tem
		if s>=36{
			tem = 1
			sum =  List36[s%36]+sum
		}else {
			tem = 0
			sum = List36[s]+sum
		}
		j--
	}
	if tem!=0{
		sum="1"+sum
	}
	return sum
}


func main(){
	fmt.Println(GetInt('z'))

	fmt.Println(Add("bb", "2x"))
}
发布了331 篇原创文章 · 获赞 132 · 访问量 75万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章