Bu sorunu fazladan boşluk kullanmadan çözen herhangi bir yanıt fark etmedim, yani gördüğüm tüm çözümlerde ya bir dizge ya da sayıyı tersine çevirmek için başka bir tam sayı ya da başka veri yapıları kullanıldı.
Java gibi diller tamsayı taşması üzerine sarılsa da, bu davranış C gibi dillerde tanımlanmamıştır. ( Java'da 2147483647 (Tamsayı.MAX_VALUE) ters çevirmeyi deneyin )
Geçici çözüm uzun veya başka bir şey kullanmak olabilir, ancak biçimsel olarak pek bilmiyorum bu yaklaşım gibi.
Şimdi, palindromik sayı kavramı, sayının aynı ileri ve geri okuması gerektiğidir. Harika. Bu bilgiyi kullanarak ilk rakam ile son rakamı karşılaştırabiliriz. İşin püf noktası, ilk rakam için numaranın sırasına ihtiyacımız var. 12321. Bunu 10000'e bölmek bize lider 1'i getirir. Sondaki 1, modun 10 ile alınmasıyla alınabilir. Şimdi, bunu 232'ye düşürmek için (12321 % 10000)/10 = (2321)/10 = 232
. Ve şimdi, 10000'in 2 kat azaltılması gerekecek. Şimdi Java koduna geçelim ...
private static boolean isPalindrome(int n) {
if (n < 0)
return false;
int div = 1;
// find the divisor
while (n / div >= 10)
div *= 10;
// any number less than 10 is a palindrome
while (n != 0) {
int leading = n / div;
int trailing = n % 10;
if (leading != trailing)
return false;
// % with div gets rid of leading digit
// dividing result by 10 gets rid of trailing digit
n = (n % div) / 10;
// got rid of 2 numbers, update div accordingly
div /= 100;
}
return true;
}
Sayıda sıfır olan durumları kapsayacak şekilde Hardik'in önerisine göre düzenlenmiştir .