Решил написать программу для сложения больших чисел с использованием длинной арифметики, но 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();
}
}
}
int[] longAr1 = new int[longStr1.length+1];
для longAr2
аналогично
Всё работает,но есть одно "но" 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();
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Делаю приложение основанное на vk api (VkNet)Любые операции с профилем другого человека производится только если у вас есть его id
Как задать OmniSharp правила именования переменных? Хочу к автоматически создаваемым приватным полям добавлять префикс _К примеру, при вызове...
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
Как поменять местами элементы в стеке в C#? Надо ли для этого релизовывать свой стек? Подскажите пожалуйста