我是 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'帮助。
希望有人能帮忙。
jeck猫
相关分类