Палиндромын дугаар


Хэцүү байдлын түвшин Easy
Байнга асуудаг Adobe Амазоны Bloomberg DBOI Google-ийн MAQ Microsoft- o9 шийдэл
Математик

Асуудлын мэдэгдэл

"Палиндромын дугаар" гэсэн асуудалд танд бүхэл тоо өгөгдсөн болохыг зааж өгсөн болно. Энэ нь палиндром мөн эсэхийг шалгана уу. Өгөгдсөн тоог мөр болгон хөрвүүлэхгүйгээр энэ асуудлыг шийднэ үү.

Палиндромын дугаар

Жишээ нь

12321
true

Тайлбар

12321 гэдэг нь палиндромын тоо бөгөөд учир нь 12321-ийг буцааж өгөхөд 12321-ийг өгдөг бөгөөд энэ нь тухайн тоотой ижил байна. Тэгэхээр 12321 бол палиндромын тоо юм.

-12321
false

Тайлбар

-12321 нь палиндромын тоо биш, учир нь бид -12321-ийг буцааж өгөхөд 12321-ийг өгдөг бөгөөд энэ нь тухайн тоотой ижил биш юм. Тэгэхээр -12321 нь палиндромын тоо биш юм.

Хандалт Палиндромын дугаар шалгах

Бидний толгойд орж ирж буй хамгийн анхны арга бол өгөгдсөн тоог мөр болгон хөрвүүлж, палиндром мөн эсэхийг шалгах явдал юм. Гэхдээ энэ арга нь хязгаарлагдмал тул бид үүнийг хийж чадахгүй, учир нь бидэнд нэмэлт зай шаардагдана мөр.

Сөрөг тоо нь хэзээ ч палиндромын тоо болохгүй гэсэн нэг чухал зүйлийг бид ажиглаж болно.

Тиймээс бид өөр аргаар хандахыг хичээх болно. Бид тоог эргүүлж, хувьсагч дотор хадгалж, анхны тоотой тэнцүү бол харьцуулна. Хэрэв буцаах дугаар нь анхны тоотой тэнцүү бол палиндром бол өөр тоо нь палиндром биш юм.

Өгөгдсөн тоог эргүүлэхийн тулд бид үүнийг хийх болно (үлдэх = n% 10) энэ нь тухайн тооны сүүлийн цифрийг өгнө. Бид буцаах дугаарыг (буцаах = буцаах * 10 + үлдэх хэсэг) үүсгэх болно. Одоо бид тоог 10-т хувааж, хоёр дахь сүүлчийн цифрийг авна. N-ийн утга тэгээс их болтол бид энэ үйлдлийг давтана.

Эцэст нь хэлэхэд, анхны дугаар нь урвуу тоотой тэнцүү байвал бид харьцуулах болно. Хэрэв тийм бол энэ нь палиндромын тоо бөгөөд өөрөөр хэлбэл палиндромын тоо биш юм.

код

Палиндромын дугаарын C ++ код

#include<bits/stdc++.h>
using namespace std;
bool isPalindrome(int num){
  if(num < 0) return  false; 
  int reversed = 0, remainder, original = num;
  while(num != 0) {
        remainder = num % 10; 
        reversed = reversed * 10 + remainder; 
        num  /= 10; 
   }
   return original == reversed;
}
  
int main() 
{ 
   if(isPalindrome(12321)) 
     cout<<"Yes, it is Palindrome"; 
   else
     cout<<"No, not Palindrome"; 
}
Yes, it is Palindrome

Палиндромын дугаарын Java код

public class check
{	 
  static  boolean isPalindrome(int num){
   if(num < 0) return  false; 
   int reversed = 0, remainder, original = num;
   while(num != 0) {
        remainder = num % 10; 
        reversed = reversed * 10 + remainder; 
        num  /= 10; 
    }
    return original == reversed;
}
  
public static void main(String args[]){ 
    if(isPalindrome(12321)) 
      System.out.println("Yes, it is Palindrome"); 
    else
      System.out.println("No, not Palindrome"); 
  } 
} 

Yes, it is Palindrome

Нарийн төвөгтэй байдлын шинжилгээ

Цаг хугацааны нарийн төвөгтэй байдал

Тооны палиндром мөн эсэхийг шалгах цаг хугацааны нарийн төвөгтэй байдал  

Сансрын нарийн төвөгтэй байдал

O (1) Учир нь бид буцаах дугаарыг хадгалахын тулд нэг нэмэлт хувьсагч ашиглаж байна.