Испорльзую такой алгоритм:
Код
Program Olimp1;
Uses CRT;
var
Chislo25: String[25];
Chislo3: String[3];
S1,S2,S3: String;
SO1,SO2,SO3,CH3,X1,X2,X3,Z1,Z2,Z3,C1,C2,C3,D1,D2,D3: REAL;
CODE: INTEGER;
begin
Chislo3 := '';
Chislo25 := '';
S1 := '';
S2 := '';
S3 := '';
CODE :=0;
C1 :=0;
C2 :=0;
C3 :=0;
CH3 :=0;
SO1 :=0;
SO2 :=0;
SO3 :=0;
Z1 := 0;
Z2 := 0;
Z3 := 0;
X1 := 0;
X2 := 0;
X3 := 0;
D1 :=0;
D2 :=0;
D3 :=0;
WriteLn('_____________________________________');
WriteLn('‚ўҐ¤ЁвҐ ¤Ґ«Ё¬®Ґ (25 § Є®ў)');
ReadLn(Chislo25);
WriteLn('‚ўҐ¤ЁвҐ ¤Ґ«ЁвҐ«м (3 § Є )');
ReadLn(Chislo3);
S1 := Copy(Chislo25,1,12);
S2 := Copy(Chislo25,13,12);
S3 := Copy(Chislo25,24,1);
Val(S1,X1,Code);
Val(S2,X2,Code);
Val(S3,X3,Code);
Val(Chislo3,CH3,Code);
Z1 := X1/CH3;
Z2 := X2/CH3;
Z3 := X3/CH3;
C1 := Int(Z1);
D1 := Frac(Z1);
C2 := Int(Z2);
D2 := Frac(Z2);
C3 := Int(Z3);
D3 := Frac(Z3);
SO1 := C1;
SO2 := D1*1000000*1000000+C2;
SO3 := D2*10+D3;
WriteLn('ЋвўҐв:');
WriteLn(SO1:12:0,SO2:12:0,SO3:12:12);
repeat
until KeyPressed;
end.
Но точность ответа составляет всего 12-16 знаков :((
Может кто-то знает лучшее решение?
Решение обязательно на Turbo Pascal'е! (Желательно без Assemblera)