Нужен код для добавления 2 номеров - PullRequest
0 голосов
/ 28 октября 2010

У меня следующие числа взяты в виде строк

Мое действительное число 1234567890123456789

, из этого я должен отделить его как s=12 s1=6789 s3=3456789012345

осталось, как я сказал

Я хотел бы добавить следующее

11+3, 2+4, 6+5, 7+6, 8+7, 9+8 так, чтобы результат был следующим:

4613579012345

Любая помощь, пожалуйста

Ответы [ 5 ]

2 голосов
/ 28 октября 2010
    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 голосов
/ 28 октября 2010

Это звучит очень похоже на домашнее задание, поэтому я не даю код.Просто подумай, что тебе нужно сделать.Вы говорите, что вам нужно снять первый символ с начала двух строк, разобрать их в целые и сложить вместе.Наконец, возьмите результат сложения и добавьте их в конец новой строки.Если вы пишете код, который следует по этому пути, он должен работать нормально.

РЕДАКТИРОВАТЬ: Как указал Ральф, вам также необходимо проверить наличие переполнений.Я не заметил этого, когда начал печатать.Хотя это не должно быть слишком сложно, так как вы начинаете с двухзначных чисел.Если число больше 9, вы можете просто вычесть 10, чтобы свести его к правильному однозначному числу.

1 голос
/ 28 октября 2010

Как насчет этого решения 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();
}
1 голос
/ 28 октября 2010

Пробовал что-то:

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

Эта функция работает только в том случае, если первое число меньше второго. Но это поможет вам узнать, как это происходит.

0 голосов
/ 28 октября 2010

Другими словами, вы хотите добавить два числа, трактующих меньшее число так, как будто оно имеет нули справа, пока оно не будет иметь такое же количество цифр, что и большее число.

Похоже, проблема в этом вопросе заключается просто в том, чтобы выяснить, на сколько вам нужно умножить меньшее число, чтобы получить количество цифр большего числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...