Помощь - Поиск - Пользователи - Календарь
Полная версия: Операции с целыми числами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Jaxx
Укажите все целые чсла, которые увеличатся на 20%, если их цифры записать в обратном порядке.
xds
Решение в лоб (в 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
Цитата(xds @ 4.07.2007 11:14) *

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

Бяка получается везде smile.gif. Дело в том, что при i=10004 произойдет переполнение, так как 40001>MaxInt.
Надо просто рабочие переменные сделать типом LongInt - и все будет в порядке smile.gif. И цикл при этом желательно вести до MaxInt, так как не совсем понятно, что делать с отрицательными числами..
xds
Насчёт переполнения при умножении ты прав (не доглядел, хотя, результат вычислений не меняется 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
А почему первым числом выводится 0 ?
xds
В коде выше t должно быть LongInt (исправил).

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

0 удовлетворяет условию задачи (0 + 0 * 0.2 = 0).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.