IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Возведение числа в БОЛЬШУЮ степень, Степень числа забивается в массив
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  0  +


Помогите пожалуйста с програмкой реализации возведения числа в большую степень (30..200). smile.gif :low:
Реализация должна вроде с помощью записи чисел в массив
Но до меня чо то не доходит как это сделать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Читайте здесь: FAQ: Длинная арифметика
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






А мне вот надо посчитать 2^500 с точностью до последней цифры,а я не могу.Почитала 'Длинную арифметику' и всё равно не могу !bye2.gif.ПОМОГИТЕ,ПОЖАЛУЙСТА СДЕЛАТЬ ЭТО...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата(SWEETY @ 10.07.2006 17:25)
Почитала 'Длинную арифметику' и всё равно не могу

Странно... У меня получилось:
uses crt;
const
_maxdig=1000;
_osn=10000;

type
Tlong=array[0.._maxdig]of integer;
Plong=^Tlong;

procedure WriteLong(var f:text;a:Plong);
var
ls, s: string;
i: integer;
begin
str(_osn div 10,ls);
write(f,a^[a^[0]]);
for i:=a^[0]-1 downto 1 do begin
str(a^[i],s);
while length(s)<length(ls) do s:='0'+s;
write(f,s);
end;
writeln(f);
end;

procedure MulLongShort(a:Plong;const k:longint;c:Plong);
var i: integer;
begin
fillchar(c^,sizeof(c^),0);
if k=0 then inc(c^[0]) else begin
for i:=1 to a^[0] do begin
c^[i+1]:=(longint(a^[i])*k+c^[i]) div _osn;
c^[i]:=(longint(a^[i])*k+c^[i]) mod _osn;
end;
if c^[a^[0]+1]>0 then c^[0]:=a^[0]+1 else c^[0]:=a^[0];
end;
end;

var
long_n1, long_n2: PLong;
i: integer;
console: text;

begin
long_n1 := new(plong);
long_n2 := new(plong);

long_n1^[0] := 1; long_n1^[1] := 1; { <-- long_n1 := 1 }
for i := 1 to 500 do begin
mullongshort(long_n1, 2, long_n2);
long_n1^ := long_n2^;
end;

assigncrt(console); rewrite(console);
writelong(console, long_n1);
close(console);

end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Volvo,огромное тебе спасибо kiss2.gif .Но сёдня ходила сдавать,он сказал,что алгоритм не понятен и почему ты уверенна,что результат правильный.Говорит,надо найти какую-то закономерность и сделать через case of . Я в тупике... mega_chok.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Я не понял, тебе надо найти ВСЕ цифры числа 2^500, или только ПОСЛЕДНЮЮ цифру? Если только последнюю, то можно найти эту самую закогомерность, например, так:
2^500 = (2^5)^100 = ((2^5)^5)^20 = (((2^5)^5)^5)^4 =>

возводим в нужную степень только последнюю цифру, и получаем, что последняя цифра числа 2^500 =

(((32)^5)^5)^4 = ((32^5)^4) = (32)^4 = 16

Ответ: последняя цифра = 6 (что, кстати, и в моей программе получилось)

А вот если надо вычислить ВСЕ цифры - то тут никакой Case Of не поможет. Придется вычислять с использованием длинной арифметики...
Цитата
почему ты уверенна,что результат правильный.
А почему он сомневается, что результат правильный? Можно же на каждом шаге распечатывать промежуточные результаты, чтоб сомнений не осталось, что это именно степени двойки...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






ВСЕ.... Я нашла только закономерность 3-х последних цифр и кол-ва знаков.Программа должна быть для любой степени (10,250...500),через цикл for и case,но результат-строка,поэтому помещается в памяти.Он знает эту закономерность,а я нет и осталась неделя... sad.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






люди а как возвести 2006 в 2007 стпень.
и 2007 в 2006 степень.люди пожалуйста помогите.оч надо
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
а как возвести 2006 в 2007 стпень.
и 2007 в 2006 степень
Вот программа (когда она попросит ввести число, введи то, которое написано):
Прикрепленный файл  long.pas ( 2.05 килобайт ) Кол-во скачиваний: 1333


Вот результат ее работы:
Прикрепленный файл  long.txt ( 12.99 килобайт ) Кол-во скачиваний: 1127
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата(volvo @ 10.07.2006 17:51) *

Странно... У меня получилось:
uses crt;
const
_maxdig=1000;
_osn=10000;

type
Tlong=array[0.._maxdig]of integer;
Plong=^Tlong;

procedure WriteLong(var f:text;a:Plong);
var
ls, s: string;
i: integer;
begin
str(_osn div 10,ls);
write(f,a^[a^[0]]);
for i:=a^[0]-1 downto 1 do begin
str(a^[i],s);
while length(s)<length(ls) do s:='0'+s;
write(f,s);
end;
writeln(f);
end;

procedure MulLongShort(a:Plong;const k:longint;c:Plong);
var i: integer;
begin
fillchar(c^,sizeof(c^),0);
if k=0 then inc(c^[0]) else begin
for i:=1 to a^[0] do begin
c^[i+1]:=(longint(a^[i])*k+c^[i]) div _osn;
c^[i]:=(longint(a^[i])*k+c^[i]) mod _osn;
end;
if c^[a^[0]+1]>0 then c^[0]:=a^[0]+1 else c^[0]:=a^[0];
end;
end;

var
long_n1, long_n2: PLong;
i: integer;
console: text;

begin
long_n1 := new(plong);
long_n2 := new(plong);

long_n1^[0] := 1; long_n1^[1] := 1; { <-- long_n1 := 1 }
for i := 1 to 500 do begin
mullongshort(long_n1, 2, long_n2);
long_n1^ := long_n2^;
end;

assigncrt(console); rewrite(console);
writelong(console, long_n1);
close(console);

end.



Эх- а как 99 в степень 99 возвести?!?!?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата
а как 99 в степень 99 возвести?!?!?
Посмотреть на программу, присоединенную к посту №9, и поменять в ней основание и показатель степени на 99 ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата(volvo @ 28.04.2007 20:52) *

Посмотреть на программу, присоединенную к посту №9, и поменять в ней основание и показатель степени на 99 ...

смотрел- в паскале изменял- и всерно белеберда получается- можете исправить плиз?? give_rose.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Может, ты покажешь, КАК именно пробовал изменять?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата(volvo @ 28.04.2007 21:03) *

Может, ты покажешь, КАК именно пробовал изменять?

в цикле вместо 1 to 2007 ставил 99 smile.gif)
я нюб да?)))

че надо изменить чтобы 99 в степень 99 ввел?) я непонимаю если чесно)
ХЕЛПП)))
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость







Плиззз)) очень срочно нужно возвести число 99 в степень 99 . И в результате должно быть целочисленный резыльт.
задачка такая что в делфи нерешаетца- а паскаль плохо знаю ) ы цикло зло.

Плиз помогите!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Ну, и с чего ты решил, что ответ
Цитата
36603234127322950493061602657251738618971207663892369140595737269931704475072474
81871965435100269504006615691006528432747182356968017994158571053544917075742738
9035006098270837114978219916760849490001
- неправильный?

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Цитата(volvo @ 28.04.2007 21:21) *

Ну, и с чего ты решил, что ответ
- неправильный?


у меня в делфи получалось
36603234127322950493061602657251738618971207663892369140595737269931704475072474
81871965435100269504\
00661569100652843274718235696801799415857105354491707574273890350060982708371149
78219916760849490001

а это 99 в 100 степени! а надо в 99!!!
чето не прально решает . вот так.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






в делфи когда цикл ставишь от 1 до 0 возведение в степень = 99
цикл от 1 до 1 = 9801 и т.д
т.е. если цикл = 1 to 3 do то в реале это полчается 99 в 4 степени


может ставить и тут также степень не 99 а 98 ??
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






в делфи когда цикл ставишь от 1 до 0 возведение в степень = 99
цикл от 1 до 1 = 9801 и т.д
т.е. если цикл = 1 to 3 do то в реале это полчается 99 в 4 степени


может ставить и тут также степень не 99 а 98 ??
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Гость






Ну, правильно... Небольшое изменение:
  buffer^ := first^;
for i := 1 to pred(99) do begin { <--- Здесь !!! }
mullongtwo(first, buffer, T);
first^ := T^;
end;


и выдается результат:
Цитата
36972963764972677265718790562880544059566876428174110243025997242355257045527752
34214106500101282327279409788895483265401194299967694943594516215701936440144180
71060667659301384999779999159200499899


(результат проверен также и с использованием библиотеки DFF Library под Дельфи, то же самое, цифра в цифру)
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.12.2024 14:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name