【问题标题】:sum digits of a numbers until get one-digit number将数字的位数相加,直到得到一位数
【发布时间】:2022-11-12 21:10:00
【问题描述】:

这段代码有效,例如,如果我有一个号码14,它将给出1+4=5 但如果我有,例如,78,结果将是7+8=15,我希望显示1+5=6,所以它将是6,而不是15。那我该如何解决呢?

   Dim lines As String() = originalString.Split(CChar(Environment.NewLine))

            For Each line As String In lines

                Dim lineSum As String = Nothing

                For Each numberChar As Char In line
                    If Asc(numberChar) >= 48 AndAlso Asc(numberChar) < 58 Then  'making sure this is a number and nothing else
                        lineSum += Asc(numberChar) - 48 'using the ascii chart to determine the value tu add
                    End If
                Next

                If results <> "" Then results &= vbNewLine
                results &= lineSum.ToString

            Next

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    您可以使用此递归方法:

    Public Shared Function GetSum(number As String, Optional maxDigits As Int32? = Nothing) As Int32?
        If Not number.All(AddressOf Char.IsDigit) Then Return Nothing
        Dim sum = number.Sum(AddressOf Char.GetNumericValue)
        If(Not maxDigits.HasValue Orelse sum.ToString().Length <= maxDigits) Then Return sum
        Return GetSum(sum.ToString(), maxDigits)
    End Function
    

    使用您的样品:

    Sub Main
        Dim sum1 As int32 = GetSum("14", 1)
        Dim sum2 As int32 = GetSum("78", 1)
        Console.WriteLine("Sum of 14: " & sum1)
        Console.WriteLine("Sum of 78: " & sum2)
    End Sub
    

    输出:

    Sum of 14: 5
    Sum of 78: 6
    

    【讨论】:

    • 一切都可以这么短:pppp谢谢你,我有很多东西要学
    猜你喜欢
    • 2020-06-20
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2013-02-03
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多