Я столкнулся с этим решением, проверяя, является ли число pandigital (n-значный номер, который использует все цифры от 1 до n ровно один раз, например, 1234).Как работает проверка числа pandigital?
private boolean isPandigital(int n){
int digits = 0;
int numDigits = String.valueOf(n).length();
for (; n > 0; n /= 10){
digits += (1 << (n - ((n/10) * 10) - 1));
}
return digits == ((1 << numDigits) - 1);
}
Цикл for берет цифру с каждого цикла (1234,123,12,1). Внутри цикла:
(n - ((n/10) * 10) - 1)
к расценивается последней цифре п и увозит 1.
Я понимаю, что метод физически делает, но то, что свойство Pandigital чисел это эксплуатируют?
'(n - ((n/10) * 10)' является очень неудобным способом записи 'n% 10' –
, почему C# тег? Ни' boolean', ни 'String.valueOf' не регенерируется C# компилятор –