1. Так как запись в числе в системе счисления с основанием N оканчивается на 1, то остаток от деления 53 на N =1 Значит при каком-то целом X мы получим: X*N+1 = 53 или X*N = 52 2. Из последнего выражения видно, что N является делителем числа 52. У числа 52 есть следующие делители: 2, 4, 13 N = 13 не подходит, так как не получим 3-х значное число. Аналогично и для N=2, 53 в двоичном виде - 110101, что явно не трехзначное. Остается один вариант N = 4. Проверим наше предположение, переведем 53₁₀ в четверичную систему счисления: 53₁₀=311₄
Несколько вариантов: program StrToInt; uses crt; var st : string; num : integer;
function val1 (s : string) : integer; var i, res : integer; s1 : string;
begin s1 := ''; res := 0; for i:=1 to length(s) do case s[i] of '0' : s1 := s1+'0'; '1' : s1 := s1+'1'; '2' : s1 := s1+'2'; '3' : s1 := s1+'3'; '4' : s1 := s1+'4'; '5' : s1 := s1+'5'; '6' : s1 := s1+'6'; '7' : s1 := s1+'7'; '8' : s1 := s1+'8'; '9' : s1 := s1+'9'; end; val (s1, res); if s[1]='-' then res := res * -1; val1 := res; end;
function isnumber (ch : char) : boolean; var res : boolean; begin res := false; case ch of '0' : res := true; '1' : res := true; '2' : res := true; '3' : res := true; '4' : res := true; '5' : res := true; '6' : res := true; '7' : res := true; '8' : res := true; '9' : res := true; end; isnumber := res; end;
function val2 (s : string) : integer; var i, res : integer;
begin res := 0; for i:=1 to length(s) do begin if isnumber(s[i]) then res := res*10 + byte(s[i])-byte('0'); end;
val2 := res; end;
BEGIN write('Input a string: '); readln(st); val(st, num); writeln('Standart function: ', num); num := val1(st); writeln('Function VAL1: ', num); num := val2(st); writeln('Function VAL2: ', num);
Значит при каком-то целом X мы получим:
X*N+1 = 53 или X*N = 52
2. Из последнего выражения видно, что N является делителем числа 52. У числа 52 есть следующие делители:
2, 4, 13
N = 13 не подходит, так как не получим 3-х значное число.
Аналогично и для N=2, 53 в двоичном виде - 110101, что явно не трехзначное. Остается один вариант N = 4.
Проверим наше предположение, переведем 53₁₀ в четверичную систему счисления:
53₁₀=311₄
ответ: N = 4
program StrToInt;
uses crt;
var
st : string;
num : integer;
function val1 (s : string) : integer;
var
i, res : integer;
s1 : string;
begin
s1 := '';
res := 0;
for i:=1 to length(s) do
case s[i] of
'0' : s1 := s1+'0';
'1' : s1 := s1+'1';
'2' : s1 := s1+'2';
'3' : s1 := s1+'3';
'4' : s1 := s1+'4';
'5' : s1 := s1+'5';
'6' : s1 := s1+'6';
'7' : s1 := s1+'7';
'8' : s1 := s1+'8';
'9' : s1 := s1+'9';
end;
val (s1, res);
if s[1]='-' then res := res * -1;
val1 := res;
end;
function isnumber (ch : char) : boolean;
var res : boolean;
begin
res := false;
case ch of
'0' : res := true;
'1' : res := true;
'2' : res := true;
'3' : res := true;
'4' : res := true;
'5' : res := true;
'6' : res := true;
'7' : res := true;
'8' : res := true;
'9' : res := true;
end;
isnumber := res;
end;
function val2 (s : string) : integer;
var
i, res : integer;
begin
res := 0;
for i:=1 to length(s) do begin
if isnumber(s[i]) then res := res*10 + byte(s[i])-byte('0');
end;
val2 := res;
end;
BEGIN
write('Input a string: ');
readln(st);
val(st, num);
writeln('Standart function: ', num);
num := val1(st);
writeln('Function VAL1: ', num);
num := val2(st);
writeln('Function VAL2: ', num);
END.