|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.04.2012, 17:47 | #1 |
Пользователь
Регистрация: 18.12.2011
Сообщений: 25
|
Возведение числа в большую степень (например 3^100)
Программа для возведения числа в большую степень. Так как число очень большой длинны не помещается ни в один стандартный тип, то для его хранения использовать ДИНАМИЧЕСКИЙ массив.
Помогите пожалуйста. (Х^K) Я возведения в К-ую степень, я просто умножаю чилсо само на себя К раз. Но не могу понять как реализовать цикл для очередного перемножения полученного ранее числа на Х.(не знаю какую проверку использовать). Да и когда я пытаюсь удалить созданный массив программа выдает ошибку(( Зараннее спасибо за любую помощь. #include <stdio.h> #include <conio.h> #include <iostream> void main() { setlocale(LC_ALL, "Russian_Russia.1251"); int pow; int x; int *arr; arr = new int; int i; int j; int flag; int buffer; printf("Введите основание!\n"); scanf("%d", &x); printf("Введите степень!\n"); scanf("%d", &pow); arr[1] = 1; for (i = 1; i <= pow; i++) { flag = 0; for(j = 1; (тут я не знаю какую проверку сделать); j++) { buffer = ((arr[j] * x) % 10) + flag; flag = 0; if ((arr[j] * x) / 10 > 0) flag = (arr[j] * x) / 10; arr[j] = buffer; } } printf("%d^%d = ", x, pow); for (i = последний индекс массива; i > 0; i--) printf("%d", arr[i]); //удаление массива(почему то не работает) //if (arr) //delete [] arr; getch(); } |
11.04.2012, 19:42 | #2 |
Пользователь
Регистрация: 18.12.2011
Сообщений: 25
|
Алгоритм: сначало было допустим 3, потом 9, потом 7-2(в первой ячейке 7, во второй 2), далее 1-8, потом 3-4-2 и так далее. мы проверяем больше ли число 9 и если да, до оставляем в ячейке остаток от дления, а в arr[j + 1] прибавляем arr[j] / 10.
как я понимаю, если допустим получили число в 100 знаков, то при следующем умножении мы перемножаем все сто ячеек на наше основание. но ведь длина числа всегда увеличивается! for (i = 1; i <= pow; i++) { flag = 0; for(j = 1; (тут я не знаю какую проверку сделать); j++) { buffer = ((arr[j] * x) % 10) + flag; flag = 0; if ((arr[j] * x) / 10 > 0) flag = (arr[j] * x) / 10; arr[j] = buffer; } в цикле for(j = 1; (тут я не знаю какую проверку сделать); j++) я должен перебрать все ячейки до длинны числа полученного ранее. но как эту длину находить я не понимаю. |
11.04.2012, 19:49 | #3 |
Форумчанин
Регистрация: 05.02.2011
Сообщений: 119
|
может я и ошибаюсь ( скорее всего ) но может быть sizeof ();?
Последний раз редактировалось Asdprom; 11.04.2012 в 19:52. |
11.04.2012, 19:52 | #4 |
Пользователь
Регистрация: 18.12.2011
Сообщений: 25
|
Да, но ф-я pow работает только со стандартными числами!
а мне нужно получать огромные числа(например 3^100 = 5.15 * 10 ^ 47) такое число не в один стандартный тип не войдет) да и по заданию у меня надо использовать именно ДИНАМИЧЕСКИЙ массив! но всё равно спасибо за помощь |
11.04.2012, 19:53 | #5 |
Форумчанин
Регистрация: 05.02.2011
Сообщений: 119
|
я отредактил сообщ. наверху.
|
11.04.2012, 20:00 | #6 |
Пользователь
Регистрация: 18.12.2011
Сообщений: 25
|
есть ф-я malloc для выделения памяти, но не могу понять как ей пользоваться!
например: int *p = (int*) maloc (sizeof(int) *n) объясните плиз |
11.04.2012, 20:03 | #7 |
Форумчанин
Регистрация: 05.02.2011
Сообщений: 119
|
а чего там в ней такого?
Вот пример для структуры: Код:
Функция malloc() возвращает указатель на первый байт области памяти размером size, которая была выделена из динамически распределяемой области памяти. Если для удовлетворения запроса в динамически распределяемой области памяти нет достаточного объема памяти, возвращается нулевой указатель. Перед попыткой использовать выделенную память всегда проверяйте, что возвращаемое значение не является нулевым указателем. Попытка использовать нулевой указатель обычно приводит к полному отказу системы. |
11.04.2012, 20:06 | #8 |
Форумчанин
Регистрация: 05.02.2011
Сообщений: 119
|
если хотите скину справочник по функциям языка C и C++
|
11.04.2012, 20:07 | #9 |
Пользователь
Регистрация: 18.12.2011
Сообщений: 25
|
было бы здорово)
|
11.04.2012, 20:09 | #10 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Это возможно. Возвести число в сотую тепень?
Самое простое: Цитата:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Возведение в степень числа в Delphi | Gallaxy | Помощь студентам | 4 | 14.09.2010 22:04 |
Возведение числа в степень | Gross | Общие вопросы Delphi | 8 | 25.12.2008 19:37 |
Возведение числа в степень | Roberto | Помощь студентам | 9 | 05.04.2008 09:50 |