递归地对数字的开始和结束数字求和,直到只剩下两个

Recursively summing start and end digits of a number until only two are left

我要实现的是以下内容:假设我们有一个数字(string 格式)“34322”。我想对开始和结束数字求和,然后对剩余数字继续重复此过程,直到只剩下两位数字。也就是说:

3+2=5, 4+2=6, 3 (563)
5+3=8, 6 (86)

我有以下方法:

string ShortenNumber(string num)
{
    int firstDigit = int.Parse(num.Substring(0, 1));
    int lastDigit = int.Parse(num.Substring(num.Length - 1, 1));
    
    if (num.Length <= 2)
    {
        return num;
    }

    return (firstDigit + lastDigit).ToString() + ShortenNumber(num.Substring(1, num.Length - 2));
}

上面给出了结果563,但到此为止。我怎样才能达到预期的行为?

对整数(34322 或 563)使用递归,而不是对部分数字(例如 432,当您取出开始 3 和结束 2 时)。因此,该函数应该以某种方式(您必须对其进行编码)从输入 34322 计算输出 563,然后才使用该输出 563 作为递归调用的输入。

你用循环从 34322 计算出 563。

注意,从你在评论中对我问题的回答来看,代码中应该有一个“%10”。

根据辩证法的回答,我实现了以下解决方案:

string ShortenNumber(string num)
{
    if (num.Length <= 2)
    {
        return num;
    }

    string shorterNum = "";
    int startIndex = 0;
    int endIndex = num.Length - 1;
    while (startIndex < endIndex)
    {
         int firstDigit = int.Parse(num.Substring(startIndex, 1));
         int lastDigit = int.Parse(num.Substring(endIndex, 1));
         int digitSum = firstDigit + lastDigit;
         if (digitSum >= 10)
         {
             digitSum = digitSum % 10;
         }
         shorterNum += digitSum;

        if (startIndex == (endIndex - 2))
            shorterNum += num.Substring(startIndex + 1, 1);

        startIndex++;
        endIndex--;
    }

    return ShortenNumber(shorterNum);
}