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

программирование pascal (паскаль) алгоритм с перестановкой цифр в числе

помогите! чего-то я тут туплу, не знаю как сделать дальше. вот условие задачи: Найти все шестизначные числа, при умножении которых на 3 или 7 в произведении получается число, образованное перестановкой цифр данного числа. вот я сделал точно такое только при умнажении просто на 3. вот что у меня получилось: program prog; var i,n,p,k:integer; a,b,c,d,e,f:array[1..2] of integer; begin for i:=100000 to 999999 do begin a[1]:=i div 100000; b[1]:=i div 10000 mod 10; c[1]:=i div 1000 mod 10; d[1]:=i div 100 mod 10; e[1]:=i div 10 mod 10; f[1]:=i mod 10; p:=i*3; // writeln(p); a[2]:=p div 100000; b[2]:=p div 10000 mod 10; c[2]:=p div 1000 mod 10; d[2]:=p div 100 mod 10; e[2]:=p div 10 mod 10; f[2]:=p mod 10; if (a[2]=a[1]) or (a[2]=b[1])or(a[2]=c[1]) or (a[2]=d[1])or(a[2]=e[1])or (a[2]=f[1]) then //a if (b[2]=a[1]) or (b[2]=b[1])or(b[2]=c[1]) or (b[2]=d[1]) or(b[2]=e[1]) or(b[2]=f[1]) then //b if (c[2]=a[1]) or (c[2]=b[1])or(c[2]=c[1]) or (c[2]=d[1]) or (c[2]=e[1])or(c[2]=f[1]) then //c if (d[2]=a[1]) or (d[2]=b[1])or(d[2]=c[1]) or (d[2]=d[1]) or (d[2]=e[1])or(d[2]=f[1]) then //d if (e[2]=a[1]) or (e[2]=b[1])or(e[2]=c[1]) or (e[2]=d[1]) or (e[2]=e[1])or(e[2]=f[1]) then //e if (f[2]=a[1]) or (f[2]=b[1])or(f[2]=c[1]) or (f[2]=d[1]) or (f[2]=e[1])or(f[2]=f[1]) then //f if a[1]+b[1]+c[1]+d[1]+e[1]+f[1]=a[2]+b[2]+c[2]+d[2]+e[2]+f[2] then writeln(i,'(',p,')'); end; end. только у меня проблема в том то например дано число 142857 то при умнажении получается чило 428571 вроде все провильно, но выплывают тут также такие числа как 595485, 198495*3=595485 тоесть я так понял у меня не правильное сравнение подскажите как их еще можно сравнить
1) Что за Паскаль такой, в котором число типа Integer больше 5 цифр?
В стандартном Turbo Pascal для Integer диапазон значений -32768..32767.
Для шестизначных чисел нужно использовать тип Longint.

2) Маленькое матиматическое исследование:
Если шестизначное число умножить на 3, то при начальном значении больше 333333 получается число больше 6 знаков!
При умножении на 7, максимальное число 142857…

3) Для удобного сравнения чисел, можно отсортировать все цифры каждого числа:

function SortLong(N : Longint) : Longint;
var Res : Longint; i, j, k : Byte; C : array [1..10] of Byte;
begin
k := 0; while N > 0 do begin Inc(k); C[K] := N mod 10; N := N div 10; end;
Res := 0; for i := 1 to 9 do for j := 1 to k do if C[N] = i then Res := Res * 10 + i;
SortLong := Res;
end;

4) Тогда программа приобретает вполне читабельный вид:

begin
for i := 100000 to 333333 do if SortLong( i ) = SortLong( i * 3 ) then WriteLn( i, 'x3=', i * 3);
for i := 100000 to 142857 do if SortLong( i ) = SortLong( i * 7 ) then WriteLn( i, 'x7=', i * 7);
end.
Михаил Медведев
Михаил Медведев
66 156
Лучший ответ