Очень длинная арифметика

297
12 сентября 2017, 07:01

Решил написать программу для сложения больших чисел с использованием длинной арифметики, но Visual Studio выдаёт ошибку "Индекс находился вне границ массива". Как решить данную проблему, чтобы программа работала корректно.

using System;
namespace LongArithmetic
{
    class Program
    {
        static void Main(string[] args)
        {
            string LongStr1, LongStr2;
            int length;
            Console.WriteLine("Ведите число 1: ");
            LongStr1=Console.ReadLine();
            Console.WriteLine("Ведите число 2: ");
            LongStr2=Console.ReadLine();
            int[] LongAr1= new int [LongStr1.Length];
            int[] LongAr2 = new int[LongStr2.Length];
            for (int i=0; i<LongStr1.Length; i++)
                {
                LongAr1[i]=int.Parse(LongStr1[i].ToString());
                }
            for (int i = 0; i < LongStr2.Length; i++)
                {
                LongAr2[i] = int.Parse(LongStr2[i].ToString());
                }
            Array.Reverse(LongAr1);
            Array.Reverse(LongAr2);
            if (LongAr1.Length > LongAr2.Length)
                length = LongAr1.Length;
            else
                length = LongAr2.Length;
            for (int i = 0; i < length; i++)
            {
                LongAr2[i] += LongAr1[i]; // суммируем последние разряды чисел
                LongAr2[i + 1] += (LongAr2[i] / 10); // если есть разряд для переноса, переносим его в следующий разряд
                LongAr2[i] %= 10; // если есть разряд для переноса он отсекается
            }
            Array.Reverse(LongAr2);
            for (int i = 0; i < LongAr2.Length; i++)
            {
                Console.Write(LongAr2[i]);
            }
            Console.ReadKey();
        }
    }
}
Answer 1
int[] longAr1 = new int[longStr1.length+1];

для longAr2 аналогично

Answer 2

Всё работает,но есть одно "но" 1-е число должно быть больше 2-го.

using System;
using System.Collections.Generic;
namespace LongArithmetic
{
    class Program
    {
        static void Main(string[] args)
        {
            string LongStr1, LongStr2;
            int MaxLength, MinLenght, r=0;
            Console.WriteLine("Ведите число 1: ");
            LongStr1=Console.ReadLine();
            Console.WriteLine("Ведите число 2: ");
            LongStr2=Console.ReadLine();
            List<int> numbers1 = new List<int> {};
            List<int> numbers2 = new List<int> {};
            for (int i=0; i<LongStr1.Length; i++)
                {
                numbers1.Add(int.Parse(LongStr1[i].ToString()));
                }
            for (int i = 0; i < LongStr2.Length; i++)
                {
                numbers2.Add(int.Parse(LongStr2[i].ToString()));
                }
            if (numbers1.Count > numbers2.Count)
            {
                MaxLength = numbers1.Count;
                MinLenght = numbers2.Count;
            }
            else
            {
                MaxLength = numbers2.Count;
                MinLenght = numbers1.Count;
            }
            numbers1.Reverse();
            numbers2.Reverse();
            for (int i = 0; i < MaxLength; i++)
            {
                if (MinLenght <= i)
                { 
                    numbers1[i] += 0 + r;
                }
                else 
                {
                    numbers1[i] += numbers2[i] + r;
                }
                if (numbers1[i] >= 10)
                {
                    r = 1;
                    numbers1[i] -= 10;
                }
                else
                {
                    r = 0;
                }
            }
         if (r > 0)
            {
                numbers1.Add(r);
            }
            numbers1.Reverse();
            for (int i = 0; i < numbers1.Count; i++)
            {
                Console.Write(numbers1[i]);
            }
            Console.ReadKey();
        }
    }
}
READ ALSO
VkNet - Как изъять id человека VK? [С#]

VkNet - Как изъять id человека VK? [С#]

Делаю приложение основанное на vk api (VkNet)Любые операции с профилем другого человека производится только если у вас есть его id

356
Настройка visual studio code. Префиксы переменным

Настройка visual studio code. Префиксы переменным

Как задать OmniSharp правила именования переменных? Хочу к автоматически создаваемым приватным полям добавлять префикс _К примеру, при вызове...

296
Control Chrome extensions C# [требует правки]

Control Chrome extensions C# [требует правки]

Is there a way to control an installed extensions on chrome browser? For exampel - I want to switch a location of VPN I use Without manually clicking on the extension and selecting location

341
Как поменять местами элементы в стеке в C#?

Как поменять местами элементы в стеке в C#?

Как поменять местами элементы в стеке в C#? Надо ли для этого релизовывать свой стек? Подскажите пожалуйста

449