gpt4 book ai didi

go - 拆分 int 以分隔数字以便遍历每个数字

转载 作者:行者123 更新时间:2023-12-01 22:00:34 29 4
gpt4 key购买 nike

我是 GoLang 的新手。所以我每天都在做 leetcode 问题,其中一个是减去一个整数的乘积和数字总和。为此,我最初考虑将整数拆分为单个数字,然后将所有数字相加/相乘以获得输出。但是无法做到这一点,因为我目前还没有充分理解类型转换。经过多次试验和错误,我放弃了这种方法,并使用除法和模数来获得最后的数字并获得输出。这是我所做的:

func subtractProductAndSum(n int) int {
sum, prod := 0, 1
for {
if n < 10 {
sum += n
prod *= n
break
}
sum += n % 10
prod *= n % 10
n = n / 10
}
return prod - sum
}
这有效,但在其他答案中,我发现了一个有效的方法,基于我的第一种方法(拆分和征服),它是:
func subtractProductAndSum(n int) int {
p := 1
s := 0

strN := strconv.Itoa(n)
for _, val := range strN {
intVal := int(val - '0')
p = p * intVal
s = s + intVal
}

return p - s
}
在这种方法中我无法理解 intVal := int(val - '0') .它肯定会得到所需的输出。我想 val正在被类型转换为 int但我无法理解什么是 - '0'帮助。
希望有人能帮忙。

最佳答案

您的 strN包含与 n 相同的字符串值. val for loop 中的变量是 character类型数据不是 int数字,它绝对不是被类型转换为 int .
变量 val可能包含以下任何字符 {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} .
所以,如果你减去 '0'从任何一个数字字符,你会得到 '0' 之间的差异还有那个digit这实际上是 int您正在寻找的值(value)。
减法基本上是ASCII之间的差值两个字符的值。
例如,如果减去 '0'来自 '5' , 你会得到 5这是整数值。ASCII '5' 的值和 '0'5348 .所以,'5' - '0'实际上是 53 - 48哪个是 5 .
这就是代码中类型转换的工作原理。

关于go - 拆分 int 以分隔数字以便遍历每个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63738929/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com