Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.032 c
1-1106259842
Bobby Digital
2005-01-21 01:24
2005.02.06
StringGird pt2


3-1104780165
Jiny
2005-01-03 22:22
2005.02.06
аналог EncodeDate в Interbase или как сцепить строковые значения


14-1106221834
1008
2005-01-20 14:50
2005.02.06
Есть предложение


6-1101115999
BFG9k
2004-11-22 12:33
2005.02.06
Закачка файла через FTP


1-1106341506
mikel
2005-01-22 00:05
2005.02.06
TPanel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский