Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/50: Рейтинг темы: голосов - 50, средняя оценка - 4.64
28 / 28 / 10
Регистрация: 10.03.2012
Сообщений: 249

Реализовать класс длинной арифметики

13.07.2012, 15:49. Показов 9812. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал писать класс длинной арифметики. Пока готов только метод для умножения больших чисел:

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
сlass Mathematic
    {
        int[] divisor;  // второй элемент
        int[] divided;  // первый элемент
        int[] result; // понятно результат    
        int max = 0;
 
        public void Product(string a, string b)
        {
            ////////--- Інициализация елементов умножения ---
           
            divisor = new int[b.Length];
            divided = new int[a.Length];
            
            if (a.Length > b.Length)                        // количество ячеек в результате должна быть в 2 раза больше 
            {                                               // чем больший элемент умножений
                result = new int[2 * a.Length];             // на всякий случай
                max = 2*a.Length ;
                for (int i = 0; i < 2*a.Length; i++)
                { result[i] = 0; }
            }
            else
            {
                result = new int[2 * b.Length];
                max = 2*b.Length ;
                for (int i = 0; i < 2*b.Length; i++)
                { result[i] = 0; }
            }
 
            for (int i = 0; i < a.Length; i++)
                divided[i] = 0;
            for (int i = 0; i < b.Length; i++)
                divisor[i] = 0;
            ////////--- Заполнение елементов умножения ---
            int k = a.Length-1;
            foreach (char ch in a)                                 //номер ячейки будет равен номеру разряда -1 тоесть первый пазряд в 0-й ячейке.
            {
                divided[k] = Convert.ToInt32(ch.ToString());
                k--;
            }
 
            k = b.Length - 1;
            foreach (char ch in b)
            {
                divisor[k] = Convert.ToInt32(ch.ToString());
                k--;
            }
            ////////--- Алгоритм умножения ---
            for (int i = 0; i < a.Length; i++)
            {
                for (int j = 0; j < b.Length; j++)                    //как-то так умножаю. разряды в этом цыкле не учитываются. если 3 на 4 множим
                {                                                     // записывав ячейку 12 вместо 2.  
                    if (divided[i] * divisor[j] < 10)
                    {
                        result[i + j] += divided[i] * divisor[j];
                    }
                    else
                    {
                        result[i + j] += (divided[i] * divisor[j]) % 10;
                        result[i + j + 1] += (int)Math.Truncate((decimal)(divided[i] * divisor[j]) / 10);
                    }
                }
            }
 
            for(int i=0; i<max-1;i++)
            { 
                if (result[i] >= 10)
                {
                    result[i + 1] += (int)Math.Truncate((decimal)result[i] / 10);       //прохожусь по резалту и навожу порядок с разрядами.
                    result[i] = result[i] % 10;
                }
            }
 
            for (int i = max-1; i>=0; i--)
            {
                Console.Write(result[i]);
            }
            Console.ReadLine();
        }
    }
Но беда в том что оооочень большие числа калькулятор винды не хочет умножать(возвращает отрицательные значения).

1. Прокоментируйте мой код. Может что-то можно сделать "умнее". А такое полюбому есть)

2. Подскажите где можно проверить уменожив числа типа "47835634765783465783465783647665464 "

Сейчас займусь делением.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.07.2012, 15:49
Ответы с готовыми решениями:

Вычисление факториала с помощью длинной арифметики
Я понимаю что эта тема поднималась уже не раз, но всё же помогите найти 100!. Я вообщем представляю как решать(заганять значения в...

Реализация длинной арифметики: исправить код
разработать класс или библиотеку функций для работы с m-битными целыми числами. Библиотека должна поддерживать числа длины до 2048 бит. ...

Оптимизация класса для длинной арифметики
Решил написать класс для работы с ОООЧЕНЬ длинными числами Какая была концепция : 1 - Числа дробные 2 - Числа хранятся в виде...

24
 Аватар для Necronomicron
65 / 50 / 7
Регистрация: 09.11.2012
Сообщений: 219
28.11.2012, 00:13
Студворк — интернет-сервис помощи студентам
van Persie, ну ты спросил, где можно проверить. Тем более, там ничего сложного, скачать и поставить платформу — это 2 минуты, писать простые задачки там в 10 раз проще и короче, чем в C#.
1
28 / 28 / 10
Регистрация: 10.03.2012
Сообщений: 249
28.11.2012, 00:14  [ТС]
Цитата Сообщение от Necronomicron Посмотреть сообщение
van Persie, ну ты спросил, где можно проверить..
Ааа понял. Спасибо.
0
 Аватар для Necronomicron
65 / 50 / 7
Регистрация: 09.11.2012
Сообщений: 219
28.11.2012, 00:16
van Persie, его интерпретатор можно использовать как обычный (или инженерный) калькулятор. Он умеет даже комплексные считать. Вообще чего только не умеет.
1
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
28.11.2012, 00:23
Цитата Сообщение от van Persie Посмотреть сообщение
2. Подскажите где можно проверить уменожив числа типа "47835634765783465783465783647665464 "
первое что пришло в голову - на бумаге, в столбик
0
28 / 28 / 10
Регистрация: 10.03.2012
Сообщений: 249
28.11.2012, 00:24  [ТС]
Цитата Сообщение от Yukikaze Посмотреть сообщение
первое что пришло в голову - на бумаге, в столбик
Пару часов на это пойдет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.11.2012, 00:24

Класс длинной арифметики
Дайте класс длинной арифметики - хотелось бы разобраться в этой штуке, а то какие исходники не найду - то не рабочие, то еще что-то( ...

Реализация длинной арифметики
Здравствуйте, форумчане. Готовлюсь к предстоящим олимпиадам решая задачи. Возникла проблема: решая задачу на динамическое программирование...

Объясните код длинной арифметики
Не могу понять синтаксиса этого кода void add(vlong *op1, vlong *op2, vlong *res) { vlong *mxop, *mnop; int i, flag=0, st; mxop =...

Бенчмарк для длинной арифметики
Долгими зимними вечерами я люблю страдать ерундой и писать свои велосипеды. Таким образом, я написал класс для длинной арифметики. И...

Ошибка в реализации длинной арифметики
Здравствуйте. Я скопировал с e-maxx'а и объединил всё в одну программу: #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
Магическое мышление и магия, современная наука не отличима от магии
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru