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

我是 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'帮助。


希望有人能帮忙。


MM们
浏览 214回答 1
1回答

jeck猫

您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'5348'5' - '0'53 - 485这就是代码中类型转换的工作方式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go