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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2009, 23:23   #1
starlet
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 12
По умолчанию Факториал (Pascal)

Задача :
Найти все такие N,что в числе N! сумма цифр будет делиться на 9.

Помоги пожалуйста!Не могу разобраться как это сделать через подрограммы
starlet вне форума Ответить с цитированием
Старый 05.04.2009, 23:33   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Посмотрите вниз в "Похожие темы". Первая же ссылка - то, что вам нужно.

upd Извиняюсь, не заметил задания.. Видимо, не туда посмотрел..
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 06.04.2009 в 13:29.
Sazary вне форума Ответить с цитированием
Старый 06.04.2009, 01:09   #3
Veselyn
Форумчанин
 
Аватар для Veselyn
 
Регистрация: 29.01.2009
Сообщений: 175
По умолчанию

Код:
program faktorial;
Var
   n, f, i: integer; 
begin
Write ('n! ');
 Readln(n);
  f:=1;
  i:=1;
  While i<=n do
    begin
      f:=f*i;
      inc(i);
if f mod 9 = 0 then
write (f,'  ');
    end;   
readln;
 end.
Все люди делятся на 10 типов: те, кто понимают двоичную систему счисления и те, кто нет.

Последний раз редактировалось Veselyn; 06.04.2009 в 01:30.
Veselyn вне форума Ответить с цитированием
Старый 06.04.2009, 13:14   #4
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

есть признак деления числа на 9.
если сумма цифр числа делится на 9, то и само число делится на 9. и наоборот.
следовательно фактариал нужно вычислять по модулю 9.

Код:
var n,i,k:longint;
begin
readln(k);
n:=1;
for i:=1 to k do
begin
n:=(n*i) mod 9;
if n=0 then writeln(i);
end;
end.
a вообще задача очень странная начиная с 6, факториал числа всегда делится на 9.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 06.04.2009, 16:40   #5
starlet
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 12
По умолчанию

это не совсем то,что нужно...это задание на тему многоразрядные числа...т.е. числа будут очень большие.. например 100! и т.п.

число должно быть представлено как массивсвоих цифр...
короче я уже запуталась по полной программе...
starlet вне форума Ответить с цитированием
Старый 06.04.2009, 16:52   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
это не совсем то,что нужно...это задание на тему многоразрядные числа...т.е. числа будут очень большие.. например 100! и т.п.
В таком случае, почитайте про длинную арифметику.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.04.2009, 17:21   #7
starlet
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 12
По умолчанию

читала...как видите не помогает
starlet вне форума Ответить с цитированием
Старый 06.04.2009, 17:24   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от starlet
читала...как видите не помогает
Честно говоря, не вижу.
Скажите что конкретно вы не понимаете?
Цитата:
Сообщение от starlet
число должно быть представлено как массивсвоих цифр...
Как видите, вы уже что-то знаете.

Массив цифр. Более эффективно будет держать в одном элементе, например, 4-х-значное число, но пусть будет по одному.
Умножение проводится столбиком. Также, как вы это делаете на бумаге.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.04.2009, 17:31   #9
starlet
Пользователь
 
Регистрация: 15.03.2009
Сообщений: 12
По умолчанию

я не понимаю как это реализовать в виде операторов..я понимаю,что каждая цифра числап должна быть элементом массива....понимаю,что они они перемножаются по разрядам,но как это записать не знаю...
туплю по полной программе...
starlet вне форума Ответить с цитированием
Старый 06.04.2009, 18:21   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот. Находит
Цитата:
все такие N,что в числе N! сумма цифр будет делиться на 9.
на заданном интервале.
Код:
uses crt;
const KOL = 1;
OSN = 10;
type massiv = array[1..100] of integer;
var
chislo : longint;
min, max, i : integer;

{-------------}
 
procedure vyvod(mas : massiv; n : integer);
var i : integer;
begin
{writeln; }
for i:=n downto 1 do
 write(mas[i]);
writeln;
end;

{----------}

procedure umn(k : integer; var mas : massiv; var n : longint);
var i,ost : integer;
begin
ost := 0;
i := 1;
repeat
mas[i] := mas[i]*k + ost;
ost := mas[i] div OSN;
mas[i] := mas[i] mod OSN;
inc(i);
until (i>n);

while ost>0 do
 begin
 inc(n);
 mas[n] := ost;
 mas[n] := mas[n] mod OSN;
 ost := ost div OSN;
 end;

end;


procedure check(num : longint);
var n : integer;
k,i : longint;
mas : massiv;
S : longint;
begin
n := 0;
k := num;
while num>0 do
 begin
 inc(n);
 mas[n] := num mod OSN;
 num := num div OSN;
 end;

for i:=k-1 downto 2 do
 begin
 umn(i,mas,n);
 end;

S := 0;
for i:=1 to n do
 S := S + mas[i];

{vyvod(mas,n);  }

if S mod 9 = 0 then
 vyvod(mas,n);

end;


begin
clrscr;

write('Vvedite granicu sleva: ');
readln(min);
write('Vvedite granicu sprava: ');
readln(max);

writeln;
for i:=min to max do
 check(i);

readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
факториал в си++ Sjava Помощь студентам 1 21.12.2008 12:17
Факториал в C++ slog Помощь студентам 2 03.12.2008 07:56
Факториал Killbrum Софт 14 13.08.2008 00:34