题解 | 进制转换

进制转换

https://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6

package main

import (
	"fmt"
	"strings"
)

func main() {
    var s string
    for {
        n, _ := fmt.Scan(&s)
        if n == 0 {
            break
        } else {
            if val , ok := HexStringToTenValue(s); ok {
                fmt.Printf("%d", val)
            }
        }
    }
}

func HexStringToTenValue(s string) (int64, bool) {
    s = strings.TrimSpace(s)
    if len(s) >= 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X') {
		s = s[2:]
	}

    var result int64 = 0
	base := int64(16)
	
	for i := 0; i < len(s); i++ {
		char := s[i]
		value, ok := HexCharToValue(char)
		if !ok {
			return 0, false
		}
		result = result*base + int64(value)
	}
	
	return result, true
}


// 单个字符转为10进制数
func HexCharToValue(c byte) (int, bool) {
	switch {
	case c >= '0' && c <= '9':
		return int(c - '0'), true
	case c >= 'a' && c <= 'f':
		return int(c-'a') + 10, true
	case c >= 'A' && c <= 'F':
		return int(c-'A') + 10, true
	default:
		return 0, false
	}
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务