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