p1rofiletest

محاسبه الگوریتم اعداد مقلوب(برعکس ) در پایتون‌

p1rofiletest ۱۳۹۷/۰۶/۳۰ مباحث عمومی برنامه‌نویسی

برنامه ای بنویسید که یک عدد ۵ رقمی از کاربر بپرسد و سپس عدد مقلوب آن را محاسبه و چاپ کند . ( عدد مقلوب یعنی ارقام را برعکس کنیم )?

من این برنامه را توی اینترنت پیدا کردم ولی اصلا نمی فهمم که چیکار کرده مممنون میشم کسی در مورد این برنامهو الگوریتم توضیح بده که از طریق ریاضی چطوری مقلوب یک عدد را محاسبه میکنیم یا بدست میاریم

مثلا چرا این کد رو نوشته   Reverse = (Reverse *10) + Reminder این چیکار میکنه یا چرا Reverse = 0  را تعریف کرده ؟

Number = int(input("Please Enter any Number: "))
Reverse = 0
while(Number > 0):
Reminder = Number %10
Reverse = (Reverse *10) + Reminder
Number = Number //10
print("\n Reverse of entered number is = %d" %Reverse) 
پاسخ‌ها به این تاپیک
امیرحسین مجیری
امیرحسین مجیری دوست‌دار داده‌ها، پی‌اچ‌پی و پژوهش روی زبان
۱۳۹۷/۰۶/۳۰

سلام

ابتدا بهتر است کد را کمی مرتب کنیم:

number = int(input("Please Enter any Number: "))
reverse = 0
while(number > 0):
    reminder = number %10
    reverse = (reverse *10) + reminder
    number = number //10
print("\n Reverse of entered number is = %d" %reverse)

حالا به ترتیب ببینیم این کد چه می کند. 

خط اول: یک پیام به کاربر نشان داده می شود، با استفاده از input یک ورودی از او گرفته می شود و با استفاده از int، ورودی کاربر به یک عدد صحیح تبدیل می شود و در متغیر number گذاشته می شود.

خط دوم: مقدار متغیر reverse برابر صفر گذاشته می شود. این متغیر در واقع قرار است مقلوب ورودی کاربر (number) باشد و طی محاسباتی که در ادامه انجام می شود، مقلوب‌شده‌ی number در reverse ساخته بشود.

حالا می خواهیم محاسبات مقلوب‌کردن را روی number انجام بدهیم. اما مقلوب کردن چیست؟

مقلوب‌کردن یعنی ارقام یک عدد برعکس چاپ شود. مثلا برای ورودی 15 پاسخ 51 را داریم. یا برای ورودی 1236587 پاسخ 7856321 را داریم. حالا کمی دقیق‌تر نگاه کنیم: در عدد 15، پنج یکان عدد است و 1 دهگان عدد است. در عدد 1236587:

هفت یکان عدد است، هشت دهگان عدد، پنج صدگان عدد، شش هزارگان عدد، سه ده‌هزارگان عدد، دو صدهزارگان عدد و یک یک‌میلیون‌گان عدد. این یعنی چه؟ یعنی در واقع عدد ما به این شکل ساخته شده است:

1236587 = 7 + (10 * 8) + (100 * 5) + (1000 * 6) + (10000 * 3) + (100000 * 2) + (1000000 * 1)

15 = 5 + (10 * 1)

پس اگر ما مثلا عدد 15 را به عنوان ورودی داشته باشیم، می‌توانیم با تقسیم آن بر 10، دهگان آن را به دست بیاوریم و از سوی دیگر باقیمانده تقسیم 15 بر 10 هم یکان عدد را به ما می‌دهد:

15 // 10 = 1

15 % 10 = 5

بیایید مشابه همین کار را برای عدد 1236587 انجام دهیم. ابتدا یکان عدد را به دست بیاوریم:

reminder = (1236587 % 10) = 7

reverse = reminder 

number = (1236587 // 10) = 123658

می بینید که باقیمانده تقسیم 1236587 بر 10، یکان عدد است و حاصل تقسیم این عدد بر 10، سایر ارقام عدد را (123658). حالا کافی است یکان را در یک متغیر بگذاریم و سایر ارقام را هم به همین ترتیب به آن بیفزاییم تا عدد مقلوب به دست بیاید (یک بار دیگر به روش ساخت عدد 1236587 که در بالا توضیح دادم نگاه کنید).

حالا می‌خواهیم یکان عدد جدید 123658 را به عدد مقلوب بیفزاییم. کافی است به انتهای 7 یک صفر اضافه کنیم و بعد یکان را از باقیمانده تقسیم 123658 بر 10 به دست آورده و به انتهای 7 اضافه کنیم. یعنی:

reminder = (123658 % 10) = 8

reverse = (7 * 10) + reminder

number = (123658 // 10) = 12365

حالا از همین روش برای ساخت برنامه استفاده می‌کنیم.

خط سوم: گفتیم که برای به دست آوردن مقلوب عدد می‌توانیم از تقسیم‌های مکرر ورودی (number) بر 10 استفاده کنیم. این کار باید تا وقتی ادامه پیدا کند که عدد ورودی صفر نشده باشد.

خط چهارم: (از این خط تا خط ششم چون زیرمجموعه‌ی while هستند باید در ابتدای خط indent (چهار فاصله یا یک تب) بگذارید) در هر مرحله از کار باقیمانده تقسیم number بر 10 را در remainder می‌گذاریم.

خط پنجم: در هر مرحله متغیر مقلوب را ضربدر 10 می‌کنیم (یک صفر به انتهای آن اضافه می‌کنیم) و بعد با متغیر خط قبلی جمع می‌کنیم. توجه کنید که دفعه‌ی اول، reverse برابر صفر است پس ضرب آن در 10 پاسخ 0 می‌دهد چون این اولین بار است و ما می‌خواهیم اولین باقیمانده تقسیم ورودی بر 10 به عنوان اولین رقم عدد reverse قرار بگیرد.

خط ششم: حالا number را بر 10 تقسیم می‌کنیم تا سایر ارقام به دست بیاید و برای عملیات بعدی روی این عدد آماده شود.

خط هفتم: با پایان گرفتن تقسیم‌های مکرر ورودی بر 10، می‌توانیم عدد مقلوب‌شده را چاپ کنیم.