在一行上输入一个十六进制数
,代表待转换的十六进制数,格式见题干。保证
转化得到的十进制数
的范围为
。
在一行上输出一个整数,代表
对应的十进制数。
0xFA93
64147
回忆十六进制转化为十进制的方法:从右往左,将第
位乘以
,然后求和。
在这个样例中,
的第
位是
,第
位是
,第
位是
,第
位是
,因此
。
package main
import (
"bufio"
"fmt"
"math"
"os"
)
func main() {
num := 0
mappings := make(map[byte]int)
mappings['A'] = 10
mappings['B'] = 11
mappings['C'] = 12
mappings['D'] = 13
mappings['E'] = 14
mappings['F'] = 15
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
s := scanner.Text()
// 检测输入参数
if len(s) <= 2 {
continue
}
for i := range s[2:] {
// 逆序遍历
c := s[len(s)-i-1]
// 进制转化:16^i * c
if c >= '0' && c <= '9' {
num += int(math.Pow(16, float64(i))) * (int(c) - int('0'))
} else if c >= 'A' && c <= 'F' {
num += int(math.Pow(16, float64(i))) * mappings[byte(c)]
} else {
// 非法字符处理
continue
}
}
fmt.Println(num)
}
} package main
import (
"fmt"
"bufio"
"os"
"math"
)
func main() {
str := ""
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
str = scanner.Text()
str = str[2:]
res := 0
n := 0
for i:=len(str)-1; i>=0; i--{
val := str[i]
val1 := int(math.Pow(16, float64(n)))
res = res + change[rune(val)]*val1
n ++
}
fmt.Println(res)
}
var change = map[rune]int{'1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, 'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15} ff关键在于字符串、字符、数组、转换,其实用go刷题还是很费事的。
package main
import (
"fmt"
"bufio"
"os"
"strconv"
)
func main() {
input := bufio.NewScanner(os.Stdin)
input.Scan()
s := input.Text()
val := s[2:]
n, err := strconv.ParseUint(val, 16, 32)
if err != nil {
panic(err)
}
fmt.Println(n)
} package main
import (
"fmt"
)
func main() {
a := 0
b := 0
for {
n, _ := fmt.Scan(&a,&b)
if n == 0 {
break
} else {
fmt.Printf("%d\n", a)
fmt.Printf("%d\n", b)
}
}
}
惊呆了,这样子也能通过。
package main
import (
"fmt"
"os"
"bufio"
"strconv"
)
func main(){
input := bufio.NewScanner(os.Stdin)
for input.Scan(){
v, _ := strconv.ParseInt(input.Text(), 0, 64)
fmt.Println(v)
}
}