پایگاه دانش علوم کامپیوتر و مهندسی نرم‌افزار - sref.ir

مسئله‌های چالشی برنامه‌نویسی، داده‌ساختارها و الگوریتم‌ها

پل‌های ارتباطی

برای برعکس کردن عدد (نوشتن ارقام آن از انتها به ابتدا) باید بتوانیم ارقام آن را تفکیک کنیم یعنی ارقامش را یکی یکی جدا کنیم. برای انجام این‌کار از عملگر باقیمانده تقسیم صحیح عدد بر 10 استفاده می‌کنیم. به مثال‌های زیر توجه کنید. عملگر % در اینجا باقیمانده تقسیم صحیح است:

5 % 10 = 5 17 % 10 = 7
753 % 10 = 3 -58654 % 10 = 4

ملاحظه می‌کنید که باقیمانده تقسیم صحیح هر عدد صحیح (حتی اعداد منفی) بر 10، برابر رقم یکان عدد است (رقم سمت راست) و همین ایده می‌تواند به جداسازی ارقام عدد کمک کند. بعنوان مثال عدد 753 را در نظر بگیرید. می‌خواهیم ارقام آن را جدا کنیم.

مرحله 1- باقیمانده تقسیم عدد 753 بر 10 را حساب می‌کنیم که برابر 3 است.
مرحله 2- حال این باقیمانده (3) را از عدد 753 کم می‌کنیم که عدد 750 حاصل می‌شود.
مرحله 3- عدد 750 را بر 10 تقسیم می‌کنیم و عدد 75 بدست می‌آید.
تا اینجای کار، رقم 3 در مرحله اول و عدد 75 در مرحله سوم بدست آمده که جداسازی عدد اولیه (753) به دو بخش است.

مراحل فوق را این‌بار بر روی عدد 75 تکرار می‌کنیم.
مرحله 4- باقیمانده تقسیم عدد 75 بر 10 را حساب می‌کنیم که برابر 5 است.
مرحله 5- حال این باقیمانده (5) را از عدد 75 کم می‌کنیم که عدد 70 حاصل می‌شود.
مرحله 6- عدد 70 را بر 10 تقسیم می‌کنیم و عدد 7 بدست می‌آید.
تا اینجای کار، رقم 3 که در مرحله اول بدست آمده‌بود، رقم 5 در مرحله 4 و عدد 7 در مرحله 6 بدست می‌آید که جداسازی عدد اولیه (753) به سه بخش است.
عدد حاصله (7) تک رقمی است و لازم نیست مراحل فوق را دوباره تکرار کنیم، هرچند تکرار آن بر روی عدد 7 مشکلی بوجود نمی‌آورد بلکه باعث تفکیک عدد 7 و بوجود آمدن عدد 0 می‌شود. یعنی می‌توان شرط پایان الگوریتم را یکی از حالت‌های زیر در نظر گرفت:
  - رسیدن به عدد حاصله صفر
  - رسیدن به عدد حاصله تک رقمی

حال می‌خواهیم با ارقام بدست آمده در هر مرحله (یعنی 3، 5 و 7) عدد 357 که برعکس 753 است را بسازیم. این کار هم بسیار ساده است و کافی است از عدد 0 شروع کنیم و در هر مرحله که رقمی را جدا می‌کنیم، عدد را در 10 ضرب کرده و رقم جدا شده را به آن اضافه کنیم. برای عدد 753 مراحل زیر را انجام می‌دهیم:

مراحله 1- عدد (فعلا صفر) را در 10 ضرب می‌کنیم و اولین رقم جدا شده (یعنی 3) را به آن اضافه می‌کنیم تا عدد 3 بدست آید
مرحله 2- عدد 3 را در 10 ضرب می‌کنیم و رقم جدا شده‌ی بعدی (یعنی 5) را به آن اضافه می‌کنیم تا عدد 35 بدست آید.
مرحله 3- عدد 35 را در 10 ضرب می‌کنیم و آخرین رقم جدا شده (یعنی 7) را به آن اضافه می‌کنیم تا عدد 357 بدست آید.

برنامه زیر مراحل جدا سازی ارقام و ساخت عدد برعکس را بصورت همزمان انجام می‌دهد:

#include <iostream>
using namespace std;
void main() {
    int n, m = 0, r;
    cin >> n;
    while (n > 0) {
        r = n % 10;
        n /= 10;
        m *= 10;
        m += r;
    }
    cout << m;
}