Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636

Длинная арифметика: деление и вычитание

17.11.2019, 12:07. Показов 3839. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно реализовать вычитание и деление целых чисел производной длины

Я почти сделал вычитание
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
String Subtraction(String A, String B)
        {
            String Result = "";
 
            int LA = A.Length;
            int LB = B.Length;
 
            int c;
            c = (LA >= LB) ? LA : LB;
            int s = 0, b = 0;
            int 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;
        }
Но я делал исходя из сложения, потому как не очень понимаю как расписать поразрядное вычитание. Тоесть мой метод иногда работает правильно, но в большинстве случаев неверно да еще перед каждым символом числа ставить знак "-".
А деление я в принципе не понимаю в длинной арифметике, вот расписал пошагово как я делю на листке бумаги, и все ровно не доганяю как это сделать поразрядно в лабе
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2019, 12:07
Ответы с готовыми решениями:

Длинная арифметика. Реализовать деление и умножение целочисленных чисел
Добрый день. Нужно реализовать деление и умножение целочисленных чисел Читал http://e-maxx.ru/algo/big_integer , деление длинного на...

Длинная Арифметика
Знаю в Jave было можно реализовать Длинную арифметику, а как в С# c=a+b; если а=1111111111111111111111111111111111111111111; ...

длинная арифметика
Составить программу для умножения многозначных чисел.

18
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
17.11.2019, 19:22  [ТС]
Ну да, пошел я нахер
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
17.11.2019, 19:27
есть библиотека BigInteger
Нажми меня. Я нужен тебе

Исходник
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
17.11.2019, 19:42  [ТС]
Masson1848, Я знаю про эту штуку, но вот как с ней работать... Вот допустим нужный мне вариант с мсдн:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
string positiveString = "91389681247993671255432112000000";
string negativeString = "-90315837410896312071002088037140000";
BigInteger posBigInt = 0;
BigInteger negBigInt = 0;
 
try {
   posBigInt = BigInteger.Parse(positiveString);
   Console.WriteLine(posBigInt);
}
catch (FormatException)
{
   Console.WriteLine("Unable to convert the string '{0}' to a BigInteger value.", 
                     positiveString);
}
 
if (BigInteger.TryParse(negativeString, out negBigInt))
  Console.WriteLine(negBigInt);
else
   Console.WriteLine("Unable to convert the string '{0}' to a BigInteger value.", 
                      negativeString);
потом
Кликните здесь для просмотра всего текста
C#
1
BigInteger result = BigInteger.Subtract(A,B)
Все это покрыто ошибками о том, что отсутствует/ неправильно записан BigInteger, притом что я писал using System.Numerics;

Вообще хотелось бы без шаблонов, а свое сделать, но я не понимаю как. Нашел пару алгоритмов и инете, а кроме как перевести из строки в массив не пойму как реализовать
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
17.11.2019, 19:50
Наверное. Нудно привести перевод в массив байт и побайтово складывать или вычитать
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
17.11.2019, 20:12  [ТС]
Masson1848, Может BigIneger нужно сначало скачать?
Допустим, скачал)) Как и куда его засунуть, после разархивации?
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
17.11.2019, 21:05
Vlast001, Куда вам нравится. можно положить рядом с классом основной программы и его использовать
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
17.11.2019, 22:40  [ТС]
Masson1848,
Кликните здесь для просмотра всего текста
BigInteger.cs(970,52): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(970,82): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(970,112): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(970,142): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(977,54): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(977,84): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(977,114): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(984,55): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(984,85): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(984,115): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(984,145): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(997,57): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(997,87): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(997,117): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(997,147): error CS0246: Не удалось найти тип или имя пространства имен "BigIntegerBuilder" (возможно, отсутствует директива using или ссылка на сборку).
BigInteger.cs(175,21): warning CS3021: '"BigInteger.Equals(ulong)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(227,20): warning CS3021: '"BigInteger.CompareTo(ulong)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(404,16): warning CS3021: '"BigInteger.BigInteger(uint)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(455,16): warning CS3021: '"BigInteger.BigInteger(ulong)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(536,16): warning CS3021: '"BigInteger.BigInteger(byte[])" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1137,41): warning CS3021: '"BigInteger.implicit operator BigInteger(sbyte)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1148,41): warning CS3021: '"BigInteger.implicit operator BigInteger(ushort)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1160,41): warning CS3021: '"BigInteger.implicit operator BigInteger(uint)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1171,41): warning CS3021: '"BigInteger.implicit operator BigInteger(ulong)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1197,41): warning CS3021: '"BigInteger.explicit operator sbyte(BigInteger)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1208,41): warning CS3021: '"BigInteger.explicit operator ushort(BigInteger)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1234,41): warning CS3021: '"BigInteger.explicit operator uint(BigInteger)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1277,41): warning CS3021: '"BigInteger.explicit operator ulong(BigInteger)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1659,37): warning CS3021: '"BigInteger.operator <(BigInteger, ulong)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1690,37): warning CS3021: '"BigInteger.operator <(ulong, BigInteger)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1664,37): warning CS3021: '"BigInteger.operator <=(BigInteger, ulong)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1695,37): warning CS3021: '"BigInteger.operator <=(ulong, BigInteger)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1669,37): warning CS3021: '"BigInteger.operator >(BigInteger, ulong)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1700,37): warning CS3021: '"BigInteger.operator >(ulong, BigInteger)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1674,37): warning CS3021: '"BigInteger.operator >=(BigInteger, ulong)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1705,37): warning CS3021: '"BigInteger.operator >=(ulong, BigInteger)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1679,37): warning CS3021: '"BigInteger.operator ==(BigInteger, ulong)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1710,37): warning CS3021: '"BigInteger.operator ==(ulong, BigInteger)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1684,37): warning CS3021: '"BigInteger.operator !=(BigInteger, ulong)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.
BigInteger.cs(1715,37): warning CS3021: '"BigInteger.operator !=(ulong, BigInteger)" не требуется атрибут CLSCompliant, так как сборка не имеет атрибута CLSCompliant.


Добавлено через 6 минут
Masson1848, Как вы его используете?
Я кидал BigInteger.cs в папку с Program.cs
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
18.11.2019, 08:51
В проекте нажимаете на "Ссылки"->"Добавить ссылку"
В разделе "Сборки" находите сборку "System.Numerics", выбираете её и нажимаете "Ок"
После этого прописываете
C#
1
using System.Numerics;
Пользуетесь спокойной типом BigInteger.
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
18.11.2019, 09:08  [ТС]
Masson1848,
Цитата Сообщение от Masson1848 Посмотреть сообщение
проекте нажимаете на "Ссылки"->"Добавить ссылку"
В разделе "Сборки" находите сборку "System.Numerics", выбираете её и нажимаете "Ок"
Ее там нету, искал по поиску, нажал "Обзор" перешел в папку со скачанными файлами и там тоже нету .dll
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
18.11.2019, 09:18
Такой у неё путь
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\Extens ions\Microsoft\LiveShare\Agent\System.Nu merics.dll

Добавлено через 1 минуту
Или здесь
C:\Windows\Microsoft.NET\Framework\v4.0. 30319\System.Numerics.DLL
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
18.11.2019, 10:08  [ТС]
Цитата Сообщение от Masson1848 Посмотреть сообщение
C:\Windows\Microsoft.NET\Framework\v4.0. 30319\System.Numerics.DLL
Спасибо)
Вы случаем не знаете как тип BigInteger вернуть обратно в строку, что бы у меня в методе не было ошибки?))
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
String Subtraction(String A, String B)
        {
            BigInteger Aa = 0;
            BigInteger Bb = 0;
 
            try
            {
                Aa = BigInteger.Parse(A);
                
            }
            catch (FormatException)
            {
                MessageBox.Show("Unable to convert the string '{0}' to a BigInteger value.", A);
            }
 
            try
            {
                Bb = BigInteger.Parse(B);
                
            }
            catch (FormatException)
            {
                MessageBox.Show("Unable to convert the string '{0}' to a BigInteger value.", B);
            }
           
            BigInteger result = BigInteger.Subtract(Aa, Bb);
           
 
            return result; //тут ошибка -> Не удается неявно преобразовать тип "System.Numerics.BigInteger" в "string".
        }
Мне нужно именно строкой для richTextBox.Text

Добавлено через 14 минут
Ладно, с этим разобрался. Возникла ошибка на этапе сборки проекта:
не удалось разрешить первичную ссылку "System.Numerics", поскольку она косвенно зависит от сборки .NET Framework "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", имеющей более позднюю версию "4.0.0.0", чем версия "2.0.0.0" в текущей целевой платформе. Numbers

mscrolib.dll нельзя добавить так как он по умолчанию уже включен( это своими словами о ошибке, при ручном подключении этой dll)
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
18.11.2019, 11:44
Поменяй версию в текущей целевой сборки

Добавлено через 50 секунд
А для преобразования в строку должен быть ToString() стандартный
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
18.11.2019, 11:55  [ТС]
Цитата Сообщение от Masson1848 Посмотреть сообщение
Поменяй версию в текущей целевой сборки
Можете просветить как это сделать?
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
18.11.2019, 12:20
https://docs.microsoft.com/ru-... ew=vs-2019

Можно попробовать так.

Добавлено через 11 минут
Видимо вы использовали .NET Framework 2. В нём ещё нет этого. выберите .NET Framework 4 версии и всё у вас будет хорошо.
Если там не нашли, то на "Решение" пкм Выбираете "Свойста". Вкладка "Приложение". Целевая рабочая среда и выбираете необходимый вам Framework

Добавлено через 6 минут
Vlast001, Если вы хотите сделать своё, то представлаете числа в виде массивов, а потом делаете операции как в школе столбиком. Можно с обычными цифрами. Можно с байтами. Как вам нравится.
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
19.11.2019, 20:30  [ТС]
Masson1848,
Цитата Сообщение от Masson1848 Посмотреть сообщение
выберите .NET Framework 4 версии и всё у вас будет хорошо.
Спасибо, у меня по умолчанию стоит 4.7.1, хз как он соскочил на 2.0, уже все работает)

Цитата Сообщение от Masson1848 Посмотреть сообщение
Если вы хотите сделать своё, то представлаете числа в виде массивов, а потом делаете операции как в школе столбиком
Я строку разбиваю на массив из цифр, а вот как расписать операции как столбиком не понимаю, кучу раз расписывал на листке бумаги, чтобы понять алгоритм как я это делаю, но проблема в том, что я это делаю даже не задумываясь, по этому я вообще не понимаю как расписывать "держим в уме" или "цифра разряда второго числа больше за цифру этого же разряда в первом числе, значит нужно к цифре из первого числа прибавить 10 и продолжить вычитать", а с делением так вообще кошмар, как люди расписывают это в коде, ума не приложу
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
19.11.2019, 21:53
Vlast001, Было бы у меня свободное время я бы вам помог
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
19.11.2019, 22:08  [ТС]
Masson1848, Аналогично))
Это +1 одна задача к списку с которым буду разбираться пока нормальные студенты празднуют новый год)
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
20.11.2019, 13:36
Vlast001, Я вам сложение интов написал
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
 
namespace Test
{
    class Program
    {
 
        private static void Main(string[] args)
        {
            string numberOne = "12345678912345678";
            string numberTwo = "123456789123456789123456";
 
            Console.WriteLine(Sub(numberOne, numberTwo));
            Console.ReadKey();
 
        }
 
        private static string Sub(string numberOne, string numberTwo)
        {
            StringBuilder s = new StringBuilder();
 
            numberTwo = new string(numberTwo.Reverse().ToArray());
            numberOne = new string(numberOne.Reverse().ToArray());
 
 
            int i = 0;
            int nextPosition = 0;
            while (i < numberOne.Length || i < numberTwo.Length)
            {
                int digit = 0;
                if (i < numberOne.Length)
                {
                    digit += numberOne[i] - '0';
                }
 
                if (i < numberTwo.Length)
                {
                    digit += numberTwo[i] - '0';
                }
 
                digit += nextPosition;
 
                s.Append(digit % 10);
 
                nextPosition = digit / 10;
 
                i++;
            }
            if (nextPosition != 0)
            {
                s.Append(nextPosition);
            }
 
            return new string(s.ToString().Reverse().ToArray());
        }
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.11.2019, 13:36
Помогаю со студенческими работами здесь

Длинная арифметика
Здравствуйте,хочу сделать класс,аналог класса BigNumber (да я понимаю что есть уже готовый но просто хочу мозги размять), Пока остановился...

Длинная арифметика: произведение
На входе: два целых числа из интервала от -10^80 до +10^80. На выходе: произведение этих чисел. Готовыми библиотеками длинной ...

Длинная арифметика/Класс большие числа
Всем привет, поставили такую задачу, нужно реализовать класс большие числа и операции над ними. Сложение , умножение и т.д На самом...

Длинная арифметика. Возведение числа в степень
Для натуральных чисел A и B (1 &lt;= A &lt;= 9, 1 &lt;= B &lt;= 104) требуется вычислить значение AB. Прошу вас, не нужно мне давать советы...

Очень длинная арифметика для чисел Фибоначчи
Кароч, есть числа Фибоначчи, но нужно вывести их не 10 штук, а сразу дофига, например 89341 чисел должно быть, но ясно, что он превышает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru