Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2010, 22:04   #11
SGU_ART
Пользователь
 
Регистрация: 16.05.2010
Сообщений: 10
По умолчанию

эх..если мог бы то не просил
или можете написать строчки как избавиться от ведущих нулей?
вот это
for i:=1 to 101 do begin {èçáàâëÿåìñÿ îò âåäóùèõ íóëåé}
if a[i]=0 then
inc(q)
else break;
end;
как можно изменить?это типо нули отбрасывает.

Последний раз редактировалось SGU_ART; 16.05.2010 в 22:16.
SGU_ART вне форума Ответить с цитированием
Старый 16.05.2010, 22:11   #12
rishikesh
Пользователь
 
Регистрация: 16.05.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от SGU_ART Посмотреть сообщение
при поиске факториала 101 выводит 9.4E+0159
на сколько я помню, что бы вывело все нужно в этом рядке:

Код:
Writeln('Result:',fact(n):8:0);
задать нужное количество цифр до и после коммы, т.е. например:

Код:
Writeln('Result:',fact(n):123:123);
rishikesh вне форума Ответить с цитированием
Старый 16.05.2010, 22:18   #13
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Если тебе нужны факториалы больших чисел, то вычислять их значение можно только в строки, либо в массивы чисел.Таких типов численных переменных,которые могут вместить эти большие значения нет.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 16.05.2010, 22:22   #14
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Ловите. Что надо - переделывайте и доделывайте.
Код:
var input,output:text; a,b,i,ost,t,q,w,e,y:longint;ar:array[1..10000] of longint;
begin
assign(input,'input.txt');reset(input);assign(output,'output.txt');rewrite(output);
readln(input,ar[1]);q:=1;  e:=ar[1]; y:=ar[1];
for i:=1 to y-1 do begin ost:=0;dec(e);for w:=1 to q do begin t:=ost;ost:=(ar[w]*e+ost) div 10000;ar[w]:=(ar[w]*e+t) mod 10000;end;
if ost>0 then begin inc(q);ar[q]:=ost;end; end;      if y=0 then write(output,1) else begin
write(output,ar[q]);
for i:=q-1 downto 1 do begin if ar[i]<10 then write(output,'0');if ar[i]<100 then write(output,'0');
if ar[i]<1000 then write(output,'0');write(output,ar[i]);
end;end;
close(input);close(output);
end.
LeBron вне форума Ответить с цитированием
Старый 16.05.2010, 22:29   #15
SGU_ART
Пользователь
 
Регистрация: 16.05.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от ROMA2PVT Посмотреть сообщение
Если тебе нужны факториалы больших чисел, то вычислять их значение можно только в строки, либо в массивы чисел.Таких типов численных переменных,которые могут вместить эти большие значения нет.
у меня есть сделанная массивом, надо выкинуть нули.
SGU_ART вне форума Ответить с цитированием
Старый 16.05.2010, 22:36   #16
loloverg
Пользователь
 
Регистрация: 16.05.2010
Сообщений: 16
По умолчанию

На сколько я помню, что бы увидеть нужное количество символов нужно в этой строке:

Код:
Writeln('Result:',fact(n):8:0);
вместо 8 и 0 поставить нужное число т.е. количество символов до коммы и после (щяс в данном случае у тебя 8 до коммы, и 0-после).
loloverg вне форума Ответить с цитированием
Старый 17.05.2010, 14:31   #17
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от loloverg Посмотреть сообщение
На сколько я помню, что бы увидеть нужное количество символов нужно в этой строке:

Код:
Writeln('Result:',fact(n):8:0);
вместо 8 и 0 поставить нужное число т.е. количество символов до коммы и после (щяс в данном случае у тебя 8 до коммы, и 0-после).
Такой подход не поможет, так как вычисления не достаточно точны. Или используйте тот подход, который в моем коде, или то же самое сделайте через строку.
LeBron вне форума Ответить с цитированием
Старый 17.05.2010, 22:09   #18
SGU_ART
Пользователь
 
Регистрация: 16.05.2010
Сообщений: 10
По умолчанию

или напишите отрывок проги чтобы возводить 2 в степень n, где 1<n<101
SGU_ART вне форума Ответить с цитированием
Старый 17.05.2010, 23:13   #19
sabbathist
Пользователь
 
Регистрация: 23.07.2009
Сообщений: 66
По умолчанию

Вся хитрость длинной арифметики в том, чтобы в массиве хранить числа в обратном порядке. Чтобы при выводе не было ведущих нулей, надо идти от конца массива к началу до первого ненулевого эл-та и уже потом начиная с него выводить значение.
O(n)
sabbathist вне форума Ответить с цитированием
Старый 17.05.2010, 23:20   #20
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от SGU_ART Посмотреть сообщение
или напишите отрывок проги чтобы возводить 2 в степень n, где 1<n<101
отрывок так отрывок...

Код:
s[1]:=2;l:=1;
for i:=1 to n-1 do begin h:=0;for q:=1 to l-1 do begin s[q]:=s[q]*2+h;h:=0;
if s[q]>9 then begin h:=1;s[q]:=s[q] mod 10;end;
                                 end;   
s[l]:=s[l]*2+h;
if s[l]>9 then begin s[l]:=s[l] mod 10;inc(l);s[l]:=1;end;
end;
LeBron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск факториала числа 0<N<101 SGU_ART Помощь студентам 0 16.05.2010 20:34
вычесление факториала числа ольга сокол Помощь студентам 4 30.03.2010 08:08
Поиск числа Aleksandr Microsoft Office Excel 6 09.12.2009 15:33
ошибка 101 в браузере Kiperc HTML и CSS 1 28.07.2009 10:40
Вычисление факториала числа PAVEL315 Общие вопросы Delphi 17 21.03.2007 07:32