Другие языки программирования и технологии

Турбо Паскаль

Ребят, помогите решить задачу пожалуйста!!! програмирование Турбо Паскаль!спасите меня, мне срочно домой надо уехать, а я не могу сдать задачи по информатике, решения есть, но программа радотает не правильно, т е она выдаёт неверные ответы! помогите!!!!Найти все такие N (N<100), что у числа N! сумма цифр – квадрат целого числа.
Novikov Aleksandr
Novikov Aleksandr
386
var
n:integer;
begin
for n:=1 to 99 do
if n<10 then begin
if (sqrt(n)-round(sqrt(n)))=0 then writeln(n);end else
if (sqrt(n div 10 + n mod 10)-round(sqrt(n div 10 + n mod 10)))=0 then writeln(n);
end.

или даже так
var
n:integer;
begin
for n:=1 to 99 do
if (sqrt(n div 10 + n mod 10)-round(sqrt(n div 10 + n mod 10)))=0 then writeln(n);
end.
ВБ
Владимир Большаков
3 426
Лучший ответ
const
Size = 40;

var
Num : array [1..Size] of Longint;

procedure InitNum;
var
N : Word;
begin
{ Факториал 0! }
for N := 1 to Size do
Num[N] := 0;
Num[1] := 1;
end;

procedure NextFactorial(N : Word);
var
Index : Word;
Perenos : Longint;
begin
for Index := 1 to Size do
begin
Num[Index] := Num[Index] * N;
Num[Index] := Num[Index] + Perenos;
Perenos := Num[Index] div 10000;
Num[Index] := Num[Index] mod 10000;
end;
if Perenos > 0 then
begin
WriteLn('Произошло переполнение при N=', N, ' !');
Halt;
end;
end;

function SummaCifr : Word;
var
N, Sum : Word;
Temp : Longint;
begin
Sum := 0;
for N := 1 to Size do
begin
Temp := Num[N];
while Temp > 0 do
begin
Sum := Sum + Temp mod 10;
Temp := Temp div 10;
end;
end;
SummaCifr := Sum;
end;

function SquareSum(Sum : Word) : Word;
begin
SquareSum := Trunc(Sqrt(Sum));
end;

procedure OutNum(N : Word);
var
Index : Word;
See : Boolean;
S : String;
begin
Write(N, '! = ');
Index := Size; See := False;
while Index > 0 do
begin
if Num[Index] = 0 then
if See then S := '0000' else S := ''
else begin
Str(Num[Index], S);
if See then while Length(S) < 4 do S := '0' + S;
See := True;
end;
Write(S);
Dec(Index);
end;
WriteLn;
end;

var
N, Sum, Square : Word;

begin
InitNum;

{ Ищем факториалы числа от 1 до 100 }
for N := 1 to 100 do
begin
NextFactorial(N);
Sum := SummaCifr;
Square := SquareSum(Sum);
if Square * Square = Sum then
begin
OutNum(N);
WriteLn('Сумма цифр ', Sum);
WriteLn('Квадрат числа ', Square);
end;
end;
end.