Сложение больших чисел через стринг - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д