2-3 صفحه قبل، کدی که مقلوب یک عدد رو حساب کنه رو نوشتم، میتونید پیداش کنید. 4 خط هم بیشتر نیست.
توو کدتون اولاً فرض کردید که عدد 5 رقم هست، که میتونه کمتر یا بیشتر باشه و برای بیشتر از 5 رقم کدتون کار نخواهد کرد.
دوماً از نظر منطقی کدتون اشتباه هست. قبل از نوشتن کد حتماً توو یه کاغذ به صورت دستی کاری که میخواید انجام بدید رو چک کنید. شما میدونید که باید رقم یکان و دهگان و صدگان و ... رو جدا کنید. پس باید این کار رو کنید که: برای یکان، باقیمونده به 10 رو حساب و دخیره کنید. برای دهگان، اول رقم سمت راست اون عدد رو حذف کنید. یعنی اگه x = x / 10 بکنید، با توجه به اینکه x از نوع int هست، رقم یکانش حذف میشه و مثلاً 1234 تبدیل میشه به 123. حالا دوباره باقیمونده به 10 بگیرید و به عنوان دهگان ذخیره کنید و این کار را تا جایی که عدد به 0 تبدیل بشه انجام بدید. مثلاً آخر کار عدد 1234 میشه 1 و اگه به 10 تقسیم کنید میشه 0 و میفهمید که به رقم آخر رسیدید. حالا میدونید که عدد 4 رو باید به 10000 ضرب کنید تا جای رقم 1 توو 1234 رو بگیره (قراره مقلوب بشه). مشکلی که هست اینه که شما باید بدونید این عدد 4 رقمی بوده تا بدونید که به 10000 ضرب کنید. برای این کار میتونید اول کار مدام عدد رو به 10 تقسیم کنید و یه متغیر رو دونه دونه زیاد کنید تا تعداد رقمها بدست بیاد.
کدی که من نوشته بودم همچین چیزی بود:
b = 0;
while(a > 0){
b = b * 10;
b += a % 10;
a = a / 10;
}
عدد a = 12345 رو در نظر بگیرید. توو اجرای اول، b میشه 5 و a میشه 1234. توو اجرای دوم، میفهمیم که این عدد هنوز 0 نشده پس بیشتر از یک رقم هست و اون 5 باید ارزشش بیشتر بشه، برای همین b رو به 10 ضرب میکنه میشه 50 و با a%10 یعنی 4 جمع میکنه و b میشه 54، a رو هم میکنه 123. دوباره توو اجرای بعدی میفهمیم که a هنوز 0 نشده پس رقمهایی دیگه ای هم در کار هست. پس b رو میکنه 540 و با 3 جمع میکنه میشه 543. بعد از 5 بار اجرا a میشه 0 و دیگه اجرا نمیشه.
اگه جاییش مبهم بود سوال کنید. فقط یادتون باشه قبل از اینکه کد بنویسید، توو کاغذ مساله رو حل کنید و کدتون رو هم سطر به سطر توو کاغذ نتیجش رو بنویسید ببینید بعد از اجرای هر خط، متغیرها چه مقداری میگیرند.
int n,m,o,y,z,s ;
n=x%10;
y=x%10;
m=y%10;
z=y%10;
o=z%10
توو کد شما اگه x باشه 12345، جفت n و y رو میکنه 5. پس قبل از y باید x رو به 10 تقسیم میکردید تا بتونید رقم دوم رو هم جدا کنید. بعد هم y رو % گرفتید که میشه خودش چون y بین 0 و 9 هست و میشه خودش.
شما بهتر بود اینطوری بنویسید:
a1 = x % 10;
x = x / 10;
a2 = x % 10;
x = x / 10;
x3 = x % 10;
...
اینطوری با 5 بار نوشتن، میتونستید رقمهای عدد 5 رقمی رو جدا کنید و آخر کار a1 رو به 100000 و a2 رو به 10000 و ...ضرب و با هم جمع کنید. اینطوری برنامهتون از نظر منطقی درست بود فقط مشکلش این بود که برای 5 رقم و کمتر کار میکرد. من توو حلقه نوشتم تا نیازی به دونستن تعداد رقمها نباشه چون کار رو تا جایی که عدد به 0 برسه انجام میده و اون ضربدر 10 یا 100 یا 1000 رو توو خود حلقه انجام میده (هر بار به 10 ضرب میکنه، بنابراین اگه 5 رقم باشه، رقم یکان 5 بار به 10 ضرب میشه و جای رقم صدهزارگان رو میگیره، و رقم دهگان 4 بار ضرب میشه (چون یه مرحله دیرتر اومده) و جای رقم دههزارگان رو میگیره و ...)