شماره پالیندروم


سطح دشواری ساده
اغلب در خشت آمازون بلومبرگ DBOI گوگل MAQ مایکروسافت o9 راه حل
ریاضی

بیان مسأله

مسئله "شماره Palindrome" بیان می کند که یک عدد صحیح به شما داده می شود. بررسی کنید که آیا این یک palindrome است یا نه. بدون تبدیل عدد داده شده به رشته ، این مسئله را حل کنید.

شماره پالیندروم

مثال

12321
true

توضیح

12321 یک عدد palindrome است زیرا وقتی 12321 را معکوس کنیم 12321 را می دهد که همان عدد داده شده است. بنابراین 12321 یک عدد palindrome است.

-12321
false

توضیح

-12321 عدد پالیندروم نیست زیرا وقتی -12321 را معکوس کنیم 12321 را می دهد- که همان عدد داده شده نیست. بنابراین -12321 عدد پالیندروم نیست.

رویکرد برای بررسی شماره Palindrome

اولین روشی که در ذهن ما وجود دارد این است که عدد داده شده را به یک رشته تبدیل کرده و بررسی کنیم که آیا آن پالیندروم است یا نه. اما ما نمی توانیم این کار را انجام دهیم زیرا این روش محدود است و همچنین به فضای اضافی برای آن نیاز داریم رشته.

همچنین می توانیم یک نکته مهم را مشاهده کنیم که یک عدد منفی هرگز یک عدد palindrome نیست.

بنابراین سعی خواهیم کرد به شکلی دیگر به آن نزدیک شویم. شماره را برعکس کرده و در یک متغیر ذخیره می کنیم و اگر برابر با عدد اصلی باشد ، مقایسه می کنیم. اگر عدد معکوس برابر با عدد اصلی باشد ، عدد یک پالیندروم است در غیر این صورت پالیندروم نیست.

برای معکوس کردن عدد داده شده ، ما کار خواهیم کرد (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

کد جاوا برای شماره Palindrome

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) زیرا ما از یک متغیر اضافی برای ذخیره عدد معکوس استفاده می کنیم.