Я не люблю фатального исхода
От жизни никогда не устаю
Я не люблю любое время года
Когда весёлых песен не пою
В.С. Высоцкий
От жизни никогда не устаю
Я не люблю любое время года
Когда весёлых песен не пою
В.С. Высоцкий
(№ 506) Требовалось написать программу, которая получает на вход натуральное число N, не превосходящее 109, и выводит число, которое получается из N после удаления всех единиц; порядок остальных цифр при этом не меняется. Например, число 19520125 должно быть преобразовано в число 952025. Число, в котором все цифры – единицы и нули, должно быть преобразовано в 0. Незначащие нули в старших разрядах полученного числа печатать не нужно. Программист написал программу неправильно.
********************************************
Оригинальный код
********************************************
var N, R, T: longint;
d: integer;
begin
readln(N);
R:=0;
T:=1;
while N>0 do begin
d := N mod 10;
if d<>1 then begin
R := R + d*T;
T := T+1
end;
N := N div 10;
end;
writeln(T);
end.
***************************************************************************************
Зачем писать преднамеренно код на языке высого уровня,искуственно
избегая прозрачного хода вещей. Есть тип данных Extended, conversion
Extended into Longint in other words inside loop type Extended позволяет
инкрементировать s и последовательно удалить единицы :-
if d <> 1 then begin
s := s + d*exp(j*Ln(10));
inc(j);
end;
Цикл сделан обратная конвертация :-
s_out := Round(s);
writeln (s_out);
Проблем при разработке хватает, чтобы не создавать их искуственно
***************************************************************************************
program prog3;
var N,j,s_out: longint;
d: integer;
s: extended;
begin
readln(N);
j :=0;
s :=0;
while N > 0 do begin
d := N mod 10;
if d <> 1 then begin
s := s + d*exp(j*Ln(10));
inc(j);
end;
N := N div 10;
end;
s_out := Round(s);
writeln(s_out);
end.
***********************************************************************************
Корректировка программы К. Полякова № 506 (24) . По видимому, как предполагается
***********************************************************************************
program polkv1;
var N, R, T: longint;
d: integer;
begin
readln(N);
R:=0;
T:=1;
while N>0 do begin
d := N mod 10;
if d<>1 then begin
R := R + d*T;
// Fixed line bellow . It was T=T+1
T := T*10;
end;
N := N div 10;
end;
// Fixed line bellow . It was writeln(T);
writeln(R);
end.
No comments:
Post a Comment