Реализовать класс больших целых чисел - C#

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

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

Необходимо реализовать класс больших целых чисел. Так как в типах int и long нет возможности хранить очень большие числовые значения, состоящие из нескольких десятков знаков и более, нужно реализовать собственный класс для работы с большими числами. Большое число можно представить в виде суммы: X=∑ (от i=0 до n-1)( 10^i*m)*(a i-тый), где m - заранее определенное натуральное число, a i-тый-целое число, состоящее из не более m цифр. Пример: m=3, X=1234567890 X=890*10^0+567*10^3+234*10^6+1*10^9 Таким образом, большое число X можно представить в виде целочисленного массива A=[a i-ого] Необходимо реализовать класс BigNumber, содержащий следующие члены: 1. Статистическая константа m (ее значения на ваше усмотрение). 2. Массив A чисел, которые определяют большое число(большое число по своему написанию является последовательностью чисел из массива A). 3. Знак числа (+/-, тип bool). 4. Конструктор для инициализации экземпляра класса из строкового написания большого числа (из переменной типа string). 5.Перезагрузка операторов: - (унарный), -(бинарный), +,*,/,==,!=,>,<,<=, >+, также для бинарных варианты перезагрузки с одним из операндов типа int. 6. Перезагрузка метода ToString() для перевода числа в строковое написание.

Решение задачи: «Реализовать класс больших целых чисел»

textual
Листинг программы
using System;
 
public class BigNumber
{
    static const int m = 3;
    uint[] a;
    bool isNegative;  
    private BigNumber(uint[] a, bool isNegative)
    {
        this.a = a;
        this.isNegative = isNegative;
    }
    public BigNumber(string s)
    {
        isNegative = s[0] == '-'
                     if(isNegative) s = s.Substring(1);
        while(s.Length % m != 0) s = "0" + s;
        a = new uint[s.Length / m];
        for(uint i = 0; i < s.Length; i += m)
        {
            String n = s.Substring(i, m);
            a[s.Length / m - i - 1] = Convert.ToUInt32(n);
        }
    }
    public String ToString()
    {
        string res = "";
        if (isNegative) res += "-";
        foreach (uint x in a)
        {
            res += String.Format("{0:3d}", x)
        }
        return res;
    }
    public static BigNumber operator - (BigNumber bn)
    {
        return new BigNumber(a, !isNegative);
    }
    public static BigNumber operator + (BigNumber bn1, BigNumber bn2)
    {
        int length = bn1.a.Length > bn2.a.Length ? bn1.a.Length : bn2.a.Length;
        int[] r = new int[length + 1];
        int c = 1;
        for(int i = 0; i < m; i++) c *= 10;
        bool adding = bn1.isNegative == bn2.isNegative;
        for (int i = 0; i < r.Length; i++)
            r[i] = 0;
        for (int i = 0; i < length; i++)
        {
            if(bn1.a.Length < i) r[i] += bn1.a[i];
            if(bn2.a.Length < i)
            {
                if(adding)
                    if(r[i] + bn2.a[i] < c)
                        r[i] += bn2.a[i];
                    else
                    {
                        r[i] += bn2.a[i];
                        r[i] -= c;
                        r[i + 1]++;
                    }
                else if (r[i] > bn2.a[i])
                    r[i] -= bn2.a[i];
                else
                {
                    r[i] += c;
                    r[i] -= bn2.a[i];
                    r[i + 1]--;
                }
            }
        }
        bool neg = bn1.isNegative;
        if(r[length] < 0)
        {
            foreach (int x in r)
            {
                x = c - 1 - x;
            }
            r[length] = 0;
            neg = !neg;
        }
        return new BigNumber(r, neg);
    }
    public static BigNumber operator - (BigNumber bn1, BigNumber bn2)
    {
        return bn1 + (-bn2);
    }
}
 
class Program
{
    static int Main(string[] args)
    {
        BigNumber bn1 = new BigNumber("-1234567890");
        BigNumber bn2 = new BigNumber("987654321");
        return 0;
    }
}

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


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

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

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