Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вопрос по Delphi


Автор: starmaster 13.5.2004, 19:12
Подскажите, пожалуйста, как отделить последнюю цифру числа, для решения следующей задачи: Вводятся числа a и b. Найти количество таких чисел в диапазоне [a;b], которые при возведении в куб дают число с последней цифрой 4? Благодарю!

Автор: _hunter 13.5.2004, 19:17
подели на 10, округли до целых, умнож на 10 и отними от исходного числа результат

Автор: Marriage 13.5.2004, 22:10
Hanter издеваешься над человеком ???
В цикле от А до B возводи число в куб, переводи его в строку и сравнивай последний символ на '4'
IntToStr()

Автор: _hunter 13.5.2004, 23:49
а скорость где? smile.gif

кстати, вместо деления и округления можно использовать деление нацело

Автор: December 14.5.2004, 01:13
if (x mod 10)=4...

Автор: starmaster 14.5.2004, 11:47
Написал решение задачи, но при работе программы она зависает, хотя вроде всё правильно.
Код

procedure TForm1.Button1Click(Sender: TObject);
var C,D,Count,i,A,B:integer;
begin
A:=StrToInt(AEdit.Text);
B:=StrToInt(BEdit.Text);
Count:=0;
for i:=A to B do
begin
  C:=i;
while C<>0 do
begin
  D:=C*C*C;
if (D mod 10)=4 then Count:=Count+1
end;

end;
Lab.Caption:=IntToStr(Count);

end;

Автор: p0s0l 14.5.2004, 12:17
А зачем там while ?
Код
for i:=A to B do
 if (i*i*i mod 10)=4 then Inc(Count);


Автор: p0s0l 14.5.2004, 12:47
А если приглядеться, то можно заметить, что возводить в степень не нужно:
Код
for i := A to B do
 if (Abs(i) mod 4) = 4 then Inc(Count);


А можно вообще без переборов:
Код
 function MyCnt(a, b : integer) : integer;
 begin
   Result := 0;
   a := ((a+5) div 10)*10 + 4;
   b := ((b+6) div 10)*10 - 6;
   if (b > a) then Result := 1 + (b-a) div 10;
 end;

 function Count4(a, b : integer) : integer;
 begin
   if (a <= 0) and (b >= 0) then Result := MyCnt(0, -a) + MyCnt(0, b)
     else if (a <= 0) and (b <= 0) then Result := MyCnt(-b, -a)
       else Result := MyCnt(a, b);
 end;

Пример вызова:
Код
Count := Count4(-55, 76);

Без возведения в степень надежнее, т.к. если A и B задать больше где-то 1000, то i*i*i перевалит за пределы возможностей integer...

Автор: starmaster 14.5.2004, 18:30
2 p0s0l

Большое спасибо! wink.gif Это задание было у меня для лабораторной в институте...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)