Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Операции с целыми числами

Автор: Jaxx 4.07.2007 13:50

Укажите все целые чсла, которые увеличатся на 20%, если их цифры записать в обратном порядке.

Автор: xds 4.07.2007 14:14

Решение в лоб (в 32-битной среде получается бяка wacko.gif).

program Rev6_5;

var
i, j, t: Integer;

begin
i := 0;
repeat
t := 0;
j := i;
while j <> 0 do
begin
t := t * 10 + j mod 10;
j := j div 10;
end;
if (6 * i = 5 * t) then Writeln(i);
Inc(i);
until i = 0;
end.

Автор: Lapp 4.07.2007 15:22

Цитата(xds @ 4.07.2007 11:14) *

Решение в лоб (в 32-битной среде получается бяка wacko.gif).

Бяка получается везде smile.gif. Дело в том, что при i=10004 произойдет переполнение, так как 40001>MaxInt.
Надо просто рабочие переменные сделать типом LongInt - и все будет в порядке smile.gif. И цикл при этом желательно вести до MaxInt, так как не совсем понятно, что делать с отрицательными числами..

Автор: xds 4.07.2007 15:42

Насчёт переполнения при умножении ты прав (не доглядел, хотя, результат вычислений не меняется smile.gif) По поводу отрицательных чисел, вопрос спорный - если применять правило увеличения на 20% как для положительных (6 * n / 5), то всё работает smile.gif

program Rev6_5;

var
i, j: Integer;
t: LongInt;

begin
i := 0;
repeat
t := 0;
j := i;
while j <> 0 do
begin
t := t * 10 + j mod 10;
j := j div 10;
end;
if 6 * LongInt(i) = 5 * t then Writeln(i);
Inc(i);
until i = 0;
Writeln;
end.

Автор: Jaxx 4.07.2007 15:52

А почему первым числом выводится 0 ?

Автор: xds 4.07.2007 15:59

В коде выше t должно быть LongInt (исправил).

Цитата
А почему первым числом выводится 0 ?

0 удовлетворяет условию задачи (0 + 0 * 0.2 = 0).