Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

"Перевернуть" число.

Страницы: 1
"Перевернуть" число.
Итак, дано число, например 3141592. Нужно его перевернуть, получится 2951413. Можно ли это сделать не переводя число в строку?
UPD:
Уже разобрался, нашел код:
Код
unit perev;
interface
function S(n:longint):longint;
implementation
function S;
var m,p:longint;
    i:integer;
begin
m:=n;
p:=0;
while m>0 do
  begin
    i:=m mod 10;
    p:=p*10+i;
    m:=m div 10;
  end;
Summ:=p;
end;
end.
Изменено: rozpants - 10.06.2010 15:45:58
Не плохо, но однако позволю себе немного отредактировать Вашу функцию исправив маленькую ошибку
Код
function S; 
var m,p:longint; 
    i:integer; 
begin 
m:=n; 
p:=0; 
while m>0 do 
  begin 
    i:=m mod 10; 
    p:=p*10+i; 
    m:=m div 10; 
  end; 
S:=p; 
end; 
Чтобы работало и с отрицательными числами нужно немного исправить код.
Код
function S;
var m,p:longint;
    i:integer;
begin
m:=n;
p:=0;
while abs(m)>0 do
  begin
    i:=m mod 10;
    p:=p*10+i;
    m:=m div 10;
  end;
S:=p;
end;
А интересно было бы модернизировать эту функцию чтобы она могла также работать и с дробными числами.
Если не требуется большая точность то можно сначала умножить число на несколько миллионов или миллиардом или еще больше, округлить и после переворота снова поделить на это же число.
Соглашусь и более того можно обойтись вообще без округление если заранее умножить на очень большое число, предельное количество разрядов для данного типа.
Да не нужно на такое большое число. Вполне достаточно сделать примерно следующее
Код
i:=10;
while round(x*i)/i<>x do i:=i*10;

И теперь мы уже знаем на что нужно умножить чтобы получить целое число.
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)