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

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

Форум «Всё о Паскале» _ Задачи _ Кв. трехзначного числа равный кубу суммы его цифр

Автор: ins 25.02.2007 4:23

Необходимо найти квадрат трехзначного числа равный кубу суммы его цифр.
Все способы расчленения числа на цифры с последующими вычислениями дают неправильный результат.
Все программы выдают: 448! НО калькулятор показвает что, 448^2=200704, а (4+4+8)^3=4096.
Поиск использовал. Предложенная mj программа также выдает 448.
В чем цимус?

Автор: мисс_граффити 25.02.2007 4:31

что за компилятор?
может, дело в банальном переполнении? ты же, наверное, integer используешь...

Автор: volvo 25.02.2007 4:39

Ссылку на программы, которыми проверял, приведи, ибо моя программа выдает, что такого числа просто НЕТ:

var i, i1, i2, i3: longint;
begin
for i1 := 1 to 9 do
for i2 := 0 to 9 do
for i3 := 0 to 9 do begin
i := 100*i1 + 10*i2 + i3;
if sqr(i) = (i1 + i2 + i3)*sqr(i1 + i2 + i3) then
writeln(i1, i2, i3)
end;
end.
Что я делаю не так?

Автор: ins 25.02.2007 4:49

2 volvo
У меня точно такая-же программа.
При использвании integer выдает 448. Тут явное переполнение. Если использовать longint, то не находит. Оно и понято, ведь квадрат трехзначного чиста растет быстрее куба суммы. Пределы, соответсвенно, ~1 000 000 и ~ 20 000.

Зачем задавать такие программы непонятно, но... в дебрях Паутины я нашел не один пример подобной задачи (кое где предлагали проверить уже введенное число).
Учителя будем пинать ногами.
Самому мне это не надо, конечно, но вот брат встрял поначалу капитально.

Всем спасибо. ©losed??

Пример mj

Код
program P2;
var
d, u: Word;
begin
writeln('');
readln(d);
if (d<100) or (d>999) then
   writeln('Error')
else begin
   u := (d div 100)+(d div 10 mod 10)+(d mod 10);
   if (d*d)=(u*u*u) then writeln('da')
   else writeln('NET');
end;
end.