![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 24.10.2008
Сообщений: 5
|
![]()
В универе мена озадачили такой задачкой: с клавы вводится натуральное число N ( от 1 до 32767). Надо вывести на экран число 2^N , то есть 2 в заданной степени.N может быть от 1 до 32767(maxInt) включительно. Через экспоненту и вещественный тип можно посчитать и 50ую степень, но на степени 127 и больше выдается ошибка(слишком большое число с пз). Но по условию задачи мне нужно считать степени двойки вплоть до maxInt, то есть 2^maxint=2^32767, а это уже оочень немаленькое число (7,0773051552247739450077651387248e +9863). Какие-нибудь соображения по этому поводу есть?
Последний раз редактировалось katletta; 25.10.2008 в 10:53. |
![]() |
![]() |
![]() |
#2 |
Delphi
Форумчанин
Регистрация: 12.06.2008
Сообщений: 137
|
![]()
Вот сделал, вроде правильно.
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 12.09.2008
Сообщений: 239
|
![]()
вот таким образом:
Код:
Данное решение является частным случаем длинного умножения...... Для тех кто не знаком с длинной арифметикой: В глобальном массиве x будет храниться наше число. Каждый элемент обозначает разряд и находятся в пределе от 0 до 9. число n показывает их колличество..... в начале программы я заношу в x число "1".... длинна числа тоже 1.... процедура f умножает число, находящееся в массиве x на 2. умножение происходит тупо столбиком.... переменная carry обозначает перенос на следущий разряд.... (кстати в массиве x число записано в обратном порядке).... все что осталось - это повторить процедуру N раз и вывести первые n элементов массива в обратном порядке...... уф))))) надеюсь объяснения исчерпывающие))))))
Надо бы избавиться от привычки ставить многоточие.....
Последний раз редактировалось Min; 25.10.2008 в 22:24. Причина: по вашей просьбе)))) |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
Посмотрите вот на это:
Код:
2^32 = 4.294967296e9 2^64 = 1.844674407e19 2^128 = 3.402823669e38 2^256 = 1.157920892e77 2^512 = 1.340780793e154 2^1024 = 1.797693135e308 2^2048 = 3.231700607e616 2^4096 = 1.044388881e1233 2^8192 = 1.090748136e2466 2^16384 = 1.189731495e4932 2^32768 = 1.415461031e9864 2^65536 = 2.003529930e19728 2^131072 = 4.014132182e39456 ... 2^262144 = 1.611325717e13377 Надеюсь, метод понятен. Для остальных степеней сами сделаете. Интересно, что калькулятор Windows легко вычисляет где-то до 2^135000. Дальше "недопустимая функция". |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Возведение в степень на Pascal | LORD-BY | Помощь студентам | 32 | 28.02.2018 07:48 |
Степень | Droid | Общие вопросы Delphi | 9 | 26.04.2008 01:51 |
Возведение в степень | Stanislav | Общие вопросы Delphi | 10 | 05.12.2007 23:34 |
Проблема с возведением в степень | set | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 15.11.2007 02:47 |
Возведение в степень... | Sota | Общие вопросы C/C++ | 7 | 18.07.2007 17:05 |