Длинная арифметика: произведение - C#
Формулировка задачи:
На входе: два целых числа из интервала от -10^80 до +10^80. На выходе:
произведение этих чисел. Готовыми библиотеками длинной
арифметики не пользоваться.
Решение задачи: «Длинная арифметика: произведение»
textual
Листинг программы
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Numbers { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // Сдвиг строки влево String LeftShiftDigits(String Number, int c) { for (int i = 0; i < c; i++) Number += 0; return Number; } String Sum(String A, String B) { String Result = ""; int lA = A.Length; int lB = B.Length; int c = (lA >= lB) ? lA : lB; int s = 0, b = 0, bA = 0, bB = 0; lA--; lB--; for (int i = 0; i < c; i++) { if (lA >= 0) { bA = Int16.Parse(Convert.ToString(A[lA])); lA--; } if (lB >= 0) { bB = Int16.Parse(Convert.ToString(B[lB])); lB--; } s = (b + bA + bB) % 10; b = (b + bA + bB) / 10; Result = Result.Insert(0, Convert.ToString(s)); bA = 0; bB = 0; } if (b == 1) Result = Result.Insert(0, "1"); return Result; } String Multiply(String A, String B) { String Result = "0", Buffer = ""; int lA = A.Length - 1; int lB = B.Length - 1; int bR, b = 0; for (int j = lB; j >= 0; j--) { for (int i = lA; i >= 0; i--) { bR = Int16.Parse(Convert.ToString(A[i])) * Int16.Parse(Convert.ToString(B[j])); Buffer = Buffer.Insert(0, Convert.ToString((bR + b) % 10)); b = (bR + b) / 10; } if (b >= 1) Buffer = Buffer.Insert(0, Convert.ToString(b)); Buffer = LeftShiftDigits(Buffer, lB - j); Result = Sum(Result, Buffer); Buffer = ""; b = 0; } return Result; } private void button1_Click(object sender, EventArgs e) { richTextBox3.Text = Multiply(richTextBox1.Text, richTextBox2.Text); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д