Сложение больших чисел через стринг - C#

Узнай цену своей работы

Формулировка задачи:

Решил заморочиться и написать что-то вроде - сложения больших чисел через стринг. Не знаю насколько вышло все просто, хотелось бы увидеть мнение, и узнать какие проблемы могут возникнуть с ним. // Вариант проверки на не число - не писал, т.к. он в данном варианте мне не нужен =) // Метод на умножение не чем особо не отличается, как я себе себе это представляю, т.к. ((целое.число%10)*(целое.число%10))/10+(целое.число%10)*(целое.число%10) всегда меньше 100
        static void Main(string[] args)
        {
            Console.WriteLine(Plus(A, B));
        }
        // не заморачивался с переменными. т.к. это тест на консоли
        // тут я вставил 2 набранных случайным образом числа // тестил и на других
        public static string A =          "438769840769847697498679480073609846097987195982598409285935772365945";
        public static string B = "90283590327567236571996746675471409818097579469576761987498723476164868264";
        public static string C { get; set; }
        public static string D { get; set; }
        public static int AA { get; set; }
        public static int BB { get; set; }
 
        // напишу немного коментов
        public static string Plus (string a, string b)
        {
            int c = 0;
            // сравниваю длинны
            if (a.Length > b.Length)
            {
                c = b.Length;
                D = a.Remove(a.Length - b.Length);
            }
            if (a.Length==b.Length)
            {
                c = a.Length;
                D = "";
            } else
            if (a.Length<b.Length)
            {
                c = a.Length;
                D = b.Remove(b.Length - a.Length);
            }
            // складываю
            for (int i = 0; i < c; i++)
            {
                AA = (BB + (int)a[a.Length - 1 - i] + (int)b[b.Length - 1 - i] - 48 * 2) % 10;
                C += AA.ToString();
                BB = (BB + (int)a[a.Length - 1 - i] + (int)b[b.Length - 1 - i] - 48 * 2) / 10;
            }
            // добавляю остаток обрезания
            if (D != "")
            {
                if (D.Length >= 1)
                {
                    c = ((int)D[D.Length - 1] + BB - 48) % 10;
                    C += c.ToString();
                    c = ((int)D[D.Length - 1] + BB - 48) / 10;
                }
                if (D.Length >= 2) 
                {
                    c = c + (int)D[D.Length - 2] - 48;
                    C += c.ToString();
                    D = D.Remove(D.Length - 2);
                    if (D.Length > 1)
                        for (int i = 0; i < D.Length; i++)
                            C += D[D.Length - 1 - i];
                    else
                        C += D;
                }
                else
                    if (c != 0)
                    C += c.ToString();
            }
            else
            if (BB != 0)
                C += BB.ToString();
            D = "";
            // переворачиваем и возвращаем
            for (int i = 0; i < C.Length; i++)
                D += C[C.Length - 1 - i];
            return D;
        }

Решение задачи: «Сложение больших чисел через стринг»

textual
Листинг программы
        List<int> ArrayToListNote(int[] array)
        {
            var list = new List<int>(array.Length + 1);
            int previousSum = 0;
            for (var i = array.Length - 1; i >= 0; i--)
            {
                var sum = previousSum + array[i];
                previousSum = sum/10;
                list.Add(sum - previousSum * 10);
            }
            //переводим остаток в 10-чное цифирное число
            while (previousSum > 0)
            {
                var nextSum = previousSum/10;
                list.Add(previousSum - nextSum * 10);
                previousSum = nextSum;
            }
 
            list.Reverse();
            return list;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.429 из 5
Похожие ответы