为了账号安全,请及时绑定邮箱和手机立即绑定

将 int 拆分为单独的数字,以便遍历每个数字

将 int 拆分为单独的数字,以便遍历每个数字

Go
MM们 2022-06-27 15:49:34
我是 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包含一个与 相同的字符串值nval变量 infor loopcharacter类型数据而不是int数字,并且绝对不是类型转换为int.

该变量val可能包含以下任何字符{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}

因此,如果您'0'从任何数字字符中减去,您将得到与您实际要查找的值之间'0'digit差异int

减法基本上是ASCII两个字符的值之间的差异。

例如,如果你减去'0''5'你会得到5哪个是整数值。和的
ASCII值是'5'和。所以,实际上是哪个。'0'5348'5' - '0'53 - 485

这就是代码中类型转换的工作方式。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号