【问题标题】:Need code for addition of 2 numbers需要添加2个数字的代码
【发布时间】:2010-10-28 13:49:51
【问题描述】:

我将后面的数字视为字符串

我的实际号码是1234567890123456789

从此我必须将其分隔为s=12 s1=6789 s3=3456789012345

照我说的做

我想补充如下

11+3, 2+4, 6+5, 7+6, 8+7, 9+8 这样的输出应该如下

4613579012345

请帮忙

【问题讨论】:

  • 这些是存储为字符串还是长整数?
  • 我没有得到你的输出。 46111315...我明白了
  • @InsertNickHere,他按字面意思添加它们,所以:1+3=42+4=66+5=11(但他只使用一位数,1)、7+6=(1)38+7=(1)59+8=(1)7。所以你得到:4613579012345
  • @Kevin 谢谢,现在我明白了。 :)

标签: c# algorithm math


【解决方案1】:
    public static string CombineNumbers(string number1, string number2)
    {
        int length = number1.Length > number2.Length ? number1.Length : number2.Length;
        string returnValue = string.Empty;

        for (int i = 0; i < length; i++)
        {
            int n1 = i >= number1.Length ? 0 : int.Parse(number1.Substring(i,1));
            int n2 = i >= number2.Length ? 0 : int.Parse(number2.Substring(i,1));
            int sum = n1 + n2;

            returnValue += sum < 10 ? sum : sum - 10;
        }
        return returnValue;
    }

【讨论】:

    【解决方案2】:

    这听起来很像家庭作业问题,所以我不提供代码。想想你需要做什么。您是说您需要从两个字符串的前面取出第一个字符,将它们解析为整数,然后将它们加在一起。最后,获取加法的结果并将它们附加到新字符串的末尾。如果您编写遵循该路径的代码,它应该可以正常工作。

    编辑:正如 Ralph 指出的那样,您还需要检查溢出。当我开始打字时,我没有注意到这一点。虽然,这不应该太难,因为你从一个两位数开始。如果数字大于 9,那么您只需减去 10 即可将其降至正确的一位数。

    【讨论】:

    • 我建议你把它放在评论中,否则我会投反对票。这不是一个可接受的答案。
    • 并注意溢出。从您的输出看来,您想要的 7+6 结果是 3。
    • 我会投票反对你的投票。这是一个问题的答案。如果它不能被接受,那么它只是许多不被接受的问题的答案之一,不是吗?
    • 这实际上不是一个答案,他只是将问题改写为建议。长话短说,他的答案显然已经给出。
    • @Ruel - 按照回答家庭作业问题的规则,这是一个可以接受的答案。 meta.stackexchange.com/questions/10811/… 实际上这个问题也可以关闭,因为没有明显的努力可以提出解决方案,只有 PlsGiveMeTheCodez
    【解决方案3】:

    这个 LINQish 解决方案怎么样:

    private string SumIt(string first, string second)
    {
        IEnumerable<char> left = first;
        IEnumerable<char> right = second;
    
        var sb = new StringBuilder();
    
        var query = left.Zip(right, (l, r) => new { Left = l, Right = r })
                        .Select(chars => new { Left = int.Parse(chars.Left.ToString()),
                                               Right = int.Parse(chars.Right.ToString()) })
                        .Select(numbers => (numbers.Left + numbers.Right) % 10);
    
        foreach (var number in query)
        {
            sb.Append(number);
        }
        return sb.ToString();
    }
    

    【讨论】:

    • 使第一部分正确,但不包括他的示例中较长数字的尾随数字。 (即你得到 461357 而不是 4613579012345)
    • @kekekela:似乎我在阅读问题时错过了这个要求。由于您的答案已被标记为正确,因此我不会对我的代码进行任何更新。
    【解决方案4】:

    尝试了一些东西:

    public static string NumAdd(int iOne, int iTwo)
        {
            char[] strOne = iOne.ToString().ToCharArray();
            char[] strTwo = iTwo.ToString().ToCharArray();
    
            string strReturn = string.Empty;
    
            for (int i = 0; i < strOne.Length; i++)
            {
                int iFirst = 0;
                if (int.TryParse(strOne[i].ToString(), out iFirst))
                {
                    int iSecond = 0;
                    if (int.TryParse(strTwo[i].ToString(), out iSecond))
                    {
                        strReturn += ((int)(iFirst + iSecond)).ToString();
                    }
                }
    
                // last one, add the remaining string
                if (i + 1 == strOne.Length)
                {
                    strReturn += iTwo.ToString().Substring(i+1); 
                    break;
                }
            }
    
            return strReturn;
        }
    

    你应该这样称呼它:

    string strBla = NumAdd(12345, 123456789);
    

    此功能仅在第一个数字小于第二个数字时有效。但这将帮助您了解它是怎么回事。

    【讨论】:

    • 不考虑总和为 10 或更大的两个数字。所以 126 和 345 会根据需要给你 4611 而不是 461。
    • 代码后面的文字也有点混乱,你说它只有在第一个数字大于第二个数字时才有效,但说“它应该被称为......”并给出一个第一个数字小于第二个数字的示例。
    • @kekekela:我已经举了一个例子(看第二个代码段),这只是一个指南,说明如何解决这样的问题。
    • 我正在查看第二个代码段,这是我的评论所依据的。它使用小于第二个数字的第一个数字调用函数,即使您转身说第一个数字需要更大。
    【解决方案5】:

    换句话说,您想添加两个数字,将较小的数字视为右边有零,直到它的位数与较大的数字相同。

    听起来现在的问题只是找出需要将较小数字乘以多少才能达到较大数字的位数。

    【讨论】:

    • 除了数字不是整数,它们是数字串,加法是每个数字模10,不是整数加法,数字之间有进位
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多