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

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

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

Решил заморочиться и написать что-то вроде - сложения больших чисел через стринг. Не знаю насколько вышло все просто, хотелось бы увидеть мнение, и узнать какие проблемы могут возникнуть с ним. // Вариант проверки на не число - не писал, т.к. он в данном варианте мне не нужен =) // Метод на умножение не чем особо не отличается, как я себе себе это представляю, т.к. ((целое.число%10)*(целое.число%10))/10+(целое.число%10)*(целое.число%10) всегда меньше 100
Листинг программы
  1. static void Main(string[] args)
  2. {
  3. Console.WriteLine(Plus(A, B));
  4. }
  5. // не заморачивался с переменными. т.к. это тест на консоли
  6. // тут я вставил 2 набранных случайным образом числа // тестил и на других
  7. public static string A = "438769840769847697498679480073609846097987195982598409285935772365945";
  8. public static string B = "90283590327567236571996746675471409818097579469576761987498723476164868264";
  9. public static string C { get; set; }
  10. public static string D { get; set; }
  11. public static int AA { get; set; }
  12. public static int BB { get; set; }
  13. // напишу немного коментов
  14. public static string Plus (string a, string b)
  15. {
  16. int c = 0;
  17. // сравниваю длинны
  18. if (a.Length > b.Length)
  19. {
  20. c = b.Length;
  21. D = a.Remove(a.Length - b.Length);
  22. }
  23. if (a.Length==b.Length)
  24. {
  25. c = a.Length;
  26. D = "";
  27. } else
  28. if (a.Length<b.Length)
  29. {
  30. c = a.Length;
  31. D = b.Remove(b.Length - a.Length);
  32. }
  33. // складываю
  34. for (int i = 0; i < c; i++)
  35. {
  36. AA = (BB + (int)a[a.Length - 1 - i] + (int)b[b.Length - 1 - i] - 48 * 2) % 10;
  37. C += AA.ToString();
  38. BB = (BB + (int)a[a.Length - 1 - i] + (int)b[b.Length - 1 - i] - 48 * 2) / 10;
  39. }
  40. // добавляю остаток обрезания
  41. if (D != "")
  42. {
  43. if (D.Length >= 1)
  44. {
  45. c = ((int)D[D.Length - 1] + BB - 48) % 10;
  46. C += c.ToString();
  47. c = ((int)D[D.Length - 1] + BB - 48) / 10;
  48. }
  49. if (D.Length >= 2)
  50. {
  51. c = c + (int)D[D.Length - 2] - 48;
  52. C += c.ToString();
  53. D = D.Remove(D.Length - 2);
  54. if (D.Length > 1)
  55. for (int i = 0; i < D.Length; i++)
  56. C += D[D.Length - 1 - i];
  57. else
  58. C += D;
  59. }
  60. else
  61. if (c != 0)
  62. C += c.ToString();
  63. }
  64. else
  65. if (BB != 0)
  66. C += BB.ToString();
  67. D = "";
  68. // переворачиваем и возвращаем
  69. for (int i = 0; i < C.Length; i++)
  70. D += C[C.Length - 1 - i];
  71. return D;
  72. }

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

textual
Листинг программы
  1.         List<int> ArrayToListNote(int[] array)
  2.         {
  3.             var list = new List<int>(array.Length + 1);
  4.             int previousSum = 0;
  5.             for (var i = array.Length - 1; i >= 0; i--)
  6.             {
  7.                 var sum = previousSum + array[i];
  8.                 previousSum = sum/10;
  9.                 list.Add(sum - previousSum * 10);
  10.             }
  11.             //переводим остаток в 10-чное цифирное число
  12.             while (previousSum > 0)
  13.             {
  14.                 var nextSum = previousSum/10;
  15.                 list.Add(previousSum - nextSum * 10);
  16.                 previousSum = nextSum;
  17.             }
  18.  
  19.             list.Reverse();
  20.             return list;
  21.         }

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


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

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

7   голосов , оценка 3.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы