Главная страница
    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.043 c
4-1103023960
Nexel
2004-12-14 14:32
2005.02.06
Есть некая процедура RasCallback


3-1104398535
aztech
2004-12-30 12:22
2005.02.06
Отключаю ADOTable входит ошибка EOF и BOF true?


11-1089650462
kosha80
2004-07-12 20:41
2005.02.06
Сохранить данные из TreeView


14-1105860340
Девушка
2005-01-16 10:25
2005.02.06
Вычисление ip-ка, браузера...


3-1105367361
AlexTregubov
2005-01-10 17:29
2005.02.06
функции SQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский