![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
blackhard |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
В общем суть задания это создание калькулятора который смогбы вычислить 99999999999! ну или 23142342342314234231423142343214*4325234534532534523443.Примерно так.Я решил подобные числа хранить в массивах типа int.Даже написал уже 2 ф.и для сложения и вычитания таких чисел(Но вот только если для беззнаковых), а вот как быть со знаком?Я подумал сделать так если перед первым числом стоит знак - то из 0 вычесть значение 1го элемента массива в который я это число помещаю.Разумно ли сделать так?И еще 1 вопрос никак не мгу сообразить как осуществить операцию ! при подобном представлении числа ?
Вот вобщемто то что я уже написал.
Сообщение отредактировано: blackhard - 3.05.2008 14:39 |
first_day |
![]()
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 86 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
Цитата И еще 1 вопрос никак не мгу сообразить как осуществить операцию ! при подобном представлении числа ? Т.е. как факториал находить? Нужно каждый раз умножать "длинное" число на короткое. Изначально записываешь в массив 1, а цикл начинаешь от 2 до n, и каждый раз умножаешь свой массив с конечным ответом на параметр цикла. -------------------- Я бы изменил мир, да Бог не дает исходников.
|
blackhard |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Т.е. как факториал находить? Нужно каждый раз умножать "длинное" число на короткое. Изначально записываешь в массив 1, а цикл начинаешь от 2 до n, и каждый раз умножаешь свой массив с конечным ответом на параметр цикла. По ходу дела n это мое длинное число -1 ? Но подобное число не может быть параметром цикла оноже слишком большое. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
blackhard, пишешь функцию для уменьшения длинного числа на 1, и функцию, проверяющую, равно ли длинное число нулю... После этого задача вычисления становится тривиальной: копируешь число, от которого надо считать факториал в доп. переменную (далее - "переменная цикла"), и на каждой итерации:
1) переменная цикла = 0? Да -> заканчиваем цикл... Нет: 2) умножаешь переменную цикла на переменную-результат (произведение остается в переменной-результате) 3) уменьшаешь переменную цикла на 1 (изначально переменная-результат должна быть равна 1)... После окончания цикла в переменной-результате будет то, что тебе нужно. Как перемножать длинное число на длинное - можешь посмотреть в FAQ-е по Паскалю "Длинная арифметика". Если б ты делал это на С++, то можно было бы привести пару ссылок на хорошие классы для работы с длинными целыми, но раз у тебя чистый С - не буду... |
blackhard |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
С фактариалом благополучно разобрался.Спасибо за помощь!Теперь понял что несовсем понимаю как сделать деление.Смотрел тут Длинная арифметика , но чето неразобрался в алгоритме.Можете разъяснить как про факториал ?
|
Bo2nik |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Никита Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Вот тут алгоритм расписан автором: "Длинная" арифметика (С.М. Окулов) (см. "Седьмая задача. Деление двух длинных чисел, т.е. нахождение целой части частного и остатка.")
|
![]() ![]() |
![]() |
Текстовая версия | 24.06.2025 6:42 |