Форум: "Основная";
Текущий архив: 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