Сделать сложение очень больших чисел, которые не влезают в long и int64, заходят как строка, при этом должны быть следующие ограничения:
- Неотрицательное число
- В аргументе только цифры
- Нет ведущих нолей
- Не пустая строка
- Целое
Нужно создать класс BigNumber и 3 его метода:
- Конструктор с ограничениями выше
- Метод сложения двух объектов (через перегрузку операторов)
- И перекрыть метод ToString()
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //сделать сложение очень больших чисел, которые не влезают в long и int64, заходят как строка, при этом должны быть следующие ограничения: //+не отрицательное число //+в аргументе только цифры //+нет ведущих нолей //+не пустая строка //+целое //нужно создать класс bignumber и 3 его метода: //+конструктор с ограничениями выше //+метод сложения двух объектов(через перегрузку операторов) //+и перекрыть метод tostring() namespace Sum { class Program { static void Main(string[] args) { BigNumber a = new BigNumber("175872"); BigNumber b = new BigNumber("1234567890123456789012345678901234567890"); //BigNumber a = new BigNumber("19"); //BigNumber b = new BigNumber("2"); Console.WriteLine(a.ToString()); Console.WriteLine(b.ToString()); var r = a + b; Console.WriteLine(r.ToString()); Console.ReadKey(); } } public class BigNumber { string bignumber; /// <summary> /// Конструктор класса /// </summary> public BigNumber(string bignum) { if (bignum.Length == 0) { Console.WriteLine("Тип вводимых данных не соответсвует требованиям"); bignumber = null; return; } else { int x1; int x2 = 0; int i = 0; foreach (var number in bignum) { try { x1 = (int)Char.GetNumericValue(number); x2 += x1; bignumber = bignum; } catch (Exception) { Console.WriteLine("Тип вводимых данных не соответсвует требованиям"); bignumber = null; break; } if (bignum.Length != 1 && x2 == 0 && i != 0) { Console.WriteLine("Тип вводимых данных не соответсвует требованиям"); bignumber = null; break; } i += 1; } } } /// <summary> /// Сложение /// </summary> /// <returns>ответ</returns> public static BigNumber operator + (BigNumber a, BigNumber b) { int[] a_array, b_array, c_array; a_array = new int[a.bignumber.Length]; b_array = new int[b.bignumber.Length]; int i = 0; foreach (var item in a.bignumber) { a_array[i] = (int)Char.GetNumericValue(item); i += 1; } int j = 0; foreach (var item in b.bignumber) { b_array[j] = (int)Char.GetNumericValue(item); j += 1; } Array.Reverse(a_array); Array.Reverse(b_array); int temp = 0; if (a.bignumber.Length >= b.bignumber.Length) { c_array = new int[a.bignumber.Length]; for (int n = 0; n < a.bignumber.Length; n++) { if ((n+1) <= b.bignumber.Length) { if (n < a.bignumber.Length-1) { c_array[n] = (a_array[n] + b_array[n] + temp) % 10; temp = (a_array[n] + b_array[n] + temp) / 10; } else { c_array[n] = a_array[n] + b_array[n] + temp; } } else { if (n < a.bignumber.Length - 1) { c_array[n] = (a_array[n] + temp) % 10; temp = (a_array[n] + temp) / 10; } else { c_array[n] = a_array[n] + temp; } } } } else { c_array = new int[b.bignumber.Length]; for (int n = 0; n < b.bignumber.Length; n++) { if ((n + 1) <= a.bignumber.Length) { if (n < b.bignumber.Length - 1) { c_array[n] = (a_array[n] + b_array[n] + temp) % 10; temp = (a_array[n] + b_array[n] + temp) / 10; } else { c_array[n] = a_array[n] + b_array[n] + temp; } } else { if (n < b.bignumber.Length - 1) { c_array[n] = (b_array[n] + temp) % 10; temp = (b_array[n] + temp) / 10; } else { c_array[n] = b_array[n] + temp; } } } } Array.Reverse(c_array); string res = String.Concat<int>(c_array); BigNumber res1 = new BigNumber(res); return res1; } public override string ToString() { return bignumber; } } }