需要添加2个数字的代码

时间:2010-10-28 13:49:51

标签: c# algorithm math

我将数字作为字符串

我的实际号码是1234567890123456789

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

剩下我说的

我想添加如下

11+3, 2+4, 6+5, 7+6, 8+7, 9+8使得输出应如下

4613579012345

请帮助

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

    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 :(得分:1)

试了一下:

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);

此功能仅在第一个数字小于第二个数字时有效。但这会帮助你了解它是如何产生的。

答案 3 :(得分:1)

这个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();
}

答案 4 :(得分:0)

换句话说,你想要添加两个数字来处理较小的数字,就像它的右边有零一样,直到它与更大的数字具有相同的数字位数。

在这一点上听起来像问题只是找出你需要多少乘以较小的数字才能达到较大数字的位数。