|
|
|
Длинная арифметика на Си12.07.2010, 19:01. Показов 103949. Ответов 81
Здравствуйте, форумчане!
Хотелось бы мне начать топик, сообщения в котором я планирую пополнять постоянно (по возможности и уровню занятости, разумеется). Тема топика, как видно из заголовка, длинная арифметика. Я не хочу подробно описывать, что такое длинная арифметика и зачем она нужна. Об этом любой может прочитать на той же википедии. Но небольшое вступление сделать все таки надо. В длинной арифметике вычисления производятся над очень большими числами. С точки зрения программирования на языке Си такими числами можно считать любые, которые "не помещаются" в стандартные типы данных, то есть те, которые больше 32-х (64-х) бит. Наиболее популярно применение длинной арифметики, пожалуй, в криптографии. Я знаю, что очень многим студентам в университетах дают задания на длинную арифметику и надеюсь, что кто-то наткнется на эти сообщения и они ему помогут (сам в свое время мучился). Под конечной целью буду предполагать создание библиотеки или пакета (набора функций) для работы с длинными числами, возможно реализация каких-либо криптографических алгоритмов для примера. Начальный план действий будет таков:
PS. Я нисколько не претендую на специалиста в данной области. В первую очередь создаю топик для самого себя, чтобы изучить данную тему и как следует в ней разобраться. Но я надеюсь, что это заитересует многих. Я знаю, что только начинаю осваивать языки программирования, поэтому очень надеюсь на поддержку наших гуру во всех аспектах задачи. PPS. За "Библию" в этой теме беру второй том из серии "Искусство программирования" Д. Кнута.
16
|
|
| 12.07.2010, 19:01 | |
|
Ответы с готовыми решениями:
81
Длинная арифметика Умножение (длинная арифметика) |
|
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,339
|
||||||
| 26.03.2026, 17:16 | ||||||
|
Extazy25, думается мне, что от вас ожидали увидеть что-то такое:
1
|
||||||
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,319
|
|||||||
| 26.03.2026, 20:41 | |||||||
1
|
|||||||
|
-50 / 1 / 0
Регистрация: 20.01.2026
Сообщений: 24
|
|
| 26.03.2026, 21:16 | |
|
Можете ещё добавить разбор числа по разрядам %10 и /10, чтобы можно было в каждую ячейку записать не только кодировку числа от 0 до 9, а побольше.
0
|
|
|
-50 / 1 / 0
Регистрация: 20.01.2026
Сообщений: 24
|
||||||
| 29.03.2026, 20:03 | ||||||
0
|
||||||
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,319
|
||
| 29.03.2026, 20:31 | ||
|
Отдельный вопрос: почему она объявлена, как возвращающая int, но при этом ничего не возвращает? (Там же самая история и с остальными функциями.)P.S. Умиляет то, что в main - единственной функции, в которой как раз таки не обязательно было писать явный return, он таки присутствует. А в остальных - нет.
0
|
||
|
-50 / 1 / 0
Регистрация: 20.01.2026
Сообщений: 24
|
||||||
| 29.03.2026, 21:09 | ||||||
|
2^1000:
0
|
||||||
|
фрилансер
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,332
|
|
| 29.03.2026, 21:49 | |
|
форматирование - для слабаков
1
|
|
|
-50 / 1 / 0
Регистрация: 20.01.2026
Сообщений: 24
|
|
| 29.03.2026, 22:21 | |
|
Согласен, в итоге это получился достаточно долгий метод, поэтому возводить в степень лучше было-бы функцией умножения, а не сложения.
0
|
|
|
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,339
|
||||||||||||
| 30.03.2026, 21:01 | ||||||||||||
1
|
||||||||||||
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,319
|
||
| 30.03.2026, 21:20 | ||
|
Если вызывающий код будет использовать результат такой функции, то это сразу UB. А если возвращаемое значение игнорируется, то код является формально корректным, хоть и неряшливым.
0
|
||
|
2493 / 1157 / 709
Регистрация: 25.04.2016
Сообщений: 3,339
|
|||||||||||||
| 30.03.2026, 23:19 | |||||||||||||
0
|
|||||||||||||
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,319
|
||
| 30.03.2026, 23:58 | ||
-Werror прописан. А -Werror - это не "педантичность", это оголтелая разнузданная солдафонщина.Хотите педантичность - -pedantic или -pedantic-errors. Но ни в моем случае не -Werror.
0
|
||
|
-50 / 1 / 0
Регистрация: 20.01.2026
Сообщений: 24
|
|
| 31.03.2026, 07:38 | |
|
А в скобках int main (void) зачем писать?
В смысле вот так void main() не достаточно?
0
|
|
|
фрилансер
6500 / 5731 / 1133
Регистрация: 11.10.2019
Сообщений: 15,332
|
|
| 31.03.2026, 07:47 | |
|
Extazy25, это Сишная фишка, чтобы туда нельзя было что угодно подставить
0
|
|
|
-50 / 1 / 0
Регистрация: 20.01.2026
Сообщений: 24
|
|
| 31.03.2026, 08:01 | |
|
Я понял, Си низкоуровневый язык программирования, а низкоуровневый язык программирования очень близко расположен к железу, а ,например, у микроконтроллеров, есть такое правило, то что входные пины должны быть подтянуты резистором, чтобы они не болтались в воздухе, ну а про выходные пины тут дело в том, что вообще зачем делать лишении телодвижения и нагружать систему по пусту, без извлечения из этого полезного действия.
0
|
|
|
Вездепух
13211 / 6844 / 1824
Регистрация: 18.10.2014
Сообщений: 17,319
|
|||
| 31.03.2026, 08:55 | |||
() являются объявлениями без прототипов. Такие объявления - deprecated, их следует избегать. То есть в классическом С функция без параметров - не (), а именно (void).Однако начиная с С23 () становится полностью эквивалентно (void). То есть начиная с С23 можно писать просто ().main всегда возвращает int. А далее - см выше.
1
|
|||
|
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,280
|
|
| 02.04.2026, 04:32 | |
|
1
|
|
|
-50 / 1 / 0
Регистрация: 20.01.2026
Сообщений: 24
|
|||||||||||
| 02.04.2026, 20:38 | |||||||||||
|
Ага, правильно вы подметили, я сам недавно запутался, и полчаса искал ошибку, а оказалось, что там где надо было printf написать, я написал print, и таким образом пытался получить от неë совершенно другое.
Дело не в том что как правильно или не правильно писать, а вот даже больше как-то в таком дело, чтобы самому не запутаться. Добавлено через 2 часа 40 минут Продолжим великие дела по теме: Функция записи строки из массива char в массив int: char ch[]={"1234567890"}; #define MAXDIG 1024 int ci[MAXDIG];
Как сейчас помню, пятый класс, я беру андройд на линуксе, и пишу прогу, чтобы помочь бабуле, с пирожками, эхх, вот это были времена:
1
|
|||||||||||
|
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,280
|
||||||
| 02.04.2026, 22:28 | ||||||
0
|
||||||
|
-50 / 1 / 0
Регистрация: 20.01.2026
Сообщений: 24
|
||||||
| 08.04.2026, 19:11 | ||||||
|
Умножим
9876543210987654321098765432109876543210 9876543210987654321098765432109876543210 9876543210 на 123456789:
Тестируя этот код я выявил, что у меня максимально число intl может быть только 217432719 ,а дальше при intl=217432720 этот код работает неправильно.
0
|
||||||
| 08.04.2026, 19:11 | |
|
Простая Длинная арифметика
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|