А такие числа есть ?
( вообще то это уже математика, которой ужасно давно не занимался поэтому, если кто найдет ошибки - исправьте )
Пусть исходное число = y*100 + x
где x - натуральное число от 0 до 99.
y - любое положительное натуральное число.
(т.е. число 123= 1*100 + 23)
Введем z представляющую порядок
Т.е. z = 10, 100, 1000, .... ( z=10^n)
и
y < z ( если z= 100 y=0..99)
Тогда задачу можно представить в виде системы:
1. y < z
2. (y*100 + x)*2 = x*z + y
2: y*200 - y = x*z - x*2
y * 199 = x * (z - 2)
Подставим в 1.
x * (z - 2) / 199 < z
x*z - x*2 < z * 199
-x*2<z(199-x)
z>-x*2/(199-x)
z - любое ( к сожалению в первом варианте у меня z выходила отрицательным, что означало отсутствие таких чисел, но при переписывании нашел ошибку ).
Зато формула y = x * (z - 2) / 199 позволяет быстро перебрать все варианты в пределах Int64. Я делал это так:
Код:
procedure TForm1.tbChislaClick(Sender: TObject);
var
x : Integer;
Zmax, y,z: Int64;
Surse, Dest: Int64;
begin
Memo1.Clear;
ZMax := High(Int64) div 100;// чтобы не вылезти за пределы
for x := 1 to 99 do
begin
z := 10;
while z <= ZMax do
begin
y := x * (z - 2);
if (y mod 199) = 0 then // y должно быть целым числом
begin
y := y div 199;
Memo1.Lines.Add(Format('(%d) %d - %d',[z, x, y] ));
end;
z := z*10;
end;
end;
Memo1.Lines.Add('STOP');
end;
Но ни одного решения не нашел.