我是 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'帮助。希望有人能帮忙。
1 回答

jeck猫
TA贡献1909条经验 获得超7个赞
您strN
包含一个与 相同的字符串值n
。val
变量 infor loop
是character
类型数据而不是int
数字,并且绝对不是类型转换为int
.
该变量val
可能包含以下任何字符{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
。
因此,如果您'0'
从任何数字字符中减去,您将得到与您实际要查找的值之间'0'
的digit
差异int
。
减法基本上是ASCII
两个字符的值之间的差异。
例如,如果你减去'0'
,'5'
你会得到5
哪个是整数值。和的ASCII
值是'5'
和。所以,实际上是哪个。'0'
53
48
'5' - '0'
53 - 48
5
这就是代码中类型转换的工作方式。
- 1 回答
- 0 关注
- 176 浏览
添加回答
举报
0/150
提交
取消