Длинная арифметика: произведение - 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);
        }
    }
}

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


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

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

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