Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Уменшение числа до одного розряда   Найти похожие ветки 

 
gyry-9   (2005-01-21 00:16) [0]

Привет DELPHIнам!!!

Например, есть переменная а:=128.
Как уменшить число до одного розряда, то есть 1+2+8=11=1+1=2?


 
KilkennyCat ©   (2005-01-21 00:26) [1]

Привет, дельфиха!

Прочитал твой пост.
Решил ответить.

элементарный способ напрашивается через использование inttostr(), strtoint() и length() в цикле, пока ентот самый Length не станет равным 1.

но есть и второй вариант.


 
KilkennyCat ©   (2005-01-21 00:29) [2]

а вообще, уменшить число до одного розряда, вовсе не то есть 1+2+8=11=1+1=2


 
Knight ©   (2005-01-21 00:31) [3]

function DecNumToOne(k:Integer):Integer;
var Str1,Str2:String;
begin
 repeat
   Str2:=IntToStr(k);
   Str1:=Str2[1];
   Delete(Str2,1,1);
   k:=StrToInt(Str1)+StrToInt(Str2);
 until (k in [0..9]);
 Result:=k;
end;


 
VMcL ©   (2005-01-21 00:32) [4]

>>gyry-9  (21.01.05 00:16)

function OneDigitSum(Value: Cardinal): Cardinal;
begin
 Result := Value;
 while Result >= 10 do
 begin
   Value := 0;
   while Result > 0 do
   begin
     Inc(Value, Result mod 10);
     Result := Result div 10;
   end;
   Result := Value;
 end;
end;


P.S.
Сабдж по-научному называется "однозначная сумма цифр".


 
MBo ©   (2005-01-21 00:32) [5]

это называется цифровой корень, он же - остаток по модулю 9. Если результат-остаток нулевой, а исходное число не 0, то результат 9. На паскале записывается элементарно.


 
Anatoly Podgoretsky ©   (2005-01-21 00:32) [6]

Это вообщето CRC/Hash


 
KilkennyCat ©   (2005-01-21 00:39) [7]

Вы все неправы. Это используется в гаданиях и гороскопах!


 
Knight ©   (2005-01-21 00:42) [8]


> [7] KilkennyCat ©   (21.01.05 00:39)

Это называется - нумерология... %)


 
Knight ©   (2005-01-21 01:43) [9]


> [4] VMcL ©   (21.01.05 00:32)

А у меня красивше... %)


 
KilkennyCat ©   (2005-01-21 04:11) [10]

я могу еще проще...

function OneDigitSum(Value: Cardinal): Cardinal;
begin
 result := value;
 repeat
    result := result div 10 + result mod 10;
 until result <= 9;
end;


 
default ©   (2005-01-21 05:16) [11]

из [5] следует что
DigitRoot := Value mod 9
сумма цифр десятичного числа имеет тот же остаток от деления на 9 что и само число


 
KilkennyCat ©   (2005-01-21 05:19) [12]

ну, так нечестно, реального сложения нету :)


 
default ©   (2005-01-21 05:21) [13]


function DigitRoot(Value: Cardinal): Cardinal;
begin
 Result := Value mod 9;
 if (Value <> 0) and (Result = 0) then Result := 9
end;


 
default ©   (2005-01-21 05:23) [14]

KilkennyCat ©   (21.01.05 05:19) [12]
http://golovolomka.hobby.ru/books/gardner/gotcha/ch2/05.html


 
KilkennyCat ©   (2005-01-21 05:30) [15]

опасная ссылка... можно потерять кучу времени :)


 
VMcL ©   (2005-01-21 08:57) [16]

>>KilkennyCat ©  (21.01.05 04:11) [10]

Ах так? Тогда я ещё больше прооптимизирую :o)

function OneDigitSum(const Value: Cardinal): Cardinal;
begin
 Result := Value;
 while Result > 9 do
   Result := Result div 10 + Result mod 10;
end;


:-P


 
Knight ©   (2005-01-21 09:54) [17]


> VMcL ©   (21.01.05 08:57) [16]

Ну вот... тот же самый вариант, который пришёл в голову сразу после выключения компа... %)



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
14-1106122704
Cosinus
2005-01-19 11:18
2005.02.06
Подскажите хорошую утилитку физического тестирования HDD...


14-1106164650
тихий вовочка
2005-01-19 22:57
2005.02.06
лохотрон


14-1106046524
WondeRu
2005-01-18 14:08
2005.02.06
Так когда появится конфернция по .NET?


1-1106565993
Vasya.ru
2005-01-24 14:26
2005.02.06
Как определить, запущено ли приложение впервые или нет?


4-1103034907
qwerty2
2004-12-14 17:35
2005.02.06
Инсталляция сервиса