36进制加法

题目描述

36进制由0-9,a-z,共36个字符表示。

要求按照加法规则计算出任意两个36进制正整数的和,如1b + 2x = 48 (解释:47+105=152)

要求:不允许使用先将36进制数字整体转为10进制,相加后再转回为36进制的做法

参考LC415. 字符串相加的扩展,在这道题的基础上额外对36进制进行处理

牛客本题链接

代码

package main

import (
	"fmt"
	"strings"
)

//ASCII码  A = 65 a = 97

func getInt(c byte) int {

	if c >= '0' && c <= '9' {
		return int(c - '0')
	}
	return int(c-'a') + 10

}
func getChar(x int) byte {

	if x >= 0 && x <= 9 {
		return byte(x) + '0'
	}

	return byte(x-10) + 'a'
}

func addString(num1, num2 string) string {

	var res strings.Builder

	i := len(num1) - 1
	j := len(num2) - 1
	carry := 0
	for i >= 0 || j >= 0 || carry > 0 {

		x := 0
		y := 0
		if i >= 0 {
			x = getInt(num1[i])
		}
		if j >= 0 {
			y = getInt(num2[j])
		}
		tmp := x + y + carry
		carry = tmp / 36
		res.WriteByte(getChar(tmp % 36))

		i--
		j--
	}

	result := res.String()
	reversed := reverseString(result)
	return reversed
}

func reverseString(s string) string {

	runes := []rune(s)
	n := len(runes)
	for i := 0; i < n/2; i++ {
		runes[i], runes[n-i-1] = runes[n-i-1], runes[i]
	}

	return string(runes)
}
func main() {

	a := "1b"
	b := "2x"

	c := addString(a, b)
	fmt.Printf("输出结果为:%v", c)
}

最后这个代码的输出结果为48

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值