isArmstrong?بررسی آرمسترانگ بودن عدد در جاوا

بررسی آرمسترانگ بودن عدد . . با جاوا اول از همه بریم سراغ اینکه عدد آرمسترانگ چه عددیه .. فک کنم مثال های پایین به خوبی این رو توضیح بده .. . :یعنی اول باید دید عددمون چند رقمیه . . بعد هر کدام از یکان ، دهگان و صدگان و .. رو به توان میرسانیم . مثلا اگه عددمون 3 رقمی بود ، یکان و دهگان و صدگان رو به توان 3 میرسانیم . و در آخر همه این ها رو با هم جمع میکنیم . اگه نتیجه جمع این اعداد با عدد قبلی یکسان و برابر بود میگیم که این عدد ارمسترانگه ! خب بریم سراغ پاسخ این سوال . در اولین قدم ما باید این عدد رو از کاربر بگیریم . من اسم عددمون رو adadVoroodi گذاشتم . یک متغیر کمکی هم به وجود میارم و اسمش رو میذارم CopyadadVoroodi . یعنی میخوام یک کپی از عددم رو توش نگه دارم . در حل این مسئله از دو حلقه استفاده میکنیم . از حلقه اول برای جدا کردن عدد های رقممون استفاده میکنیم و میگیم تا وقتی که رقممون بزرگ تر از صفر هست بیا و مرتبه های این رقم رو از هم جدا کن و با هر بار جدا کردن یکی بشمار ( این یکی بشمار رو با استفاده از تعریف یک متغیر به اسم counter به وجود میاوریم و هر بار که حلقه while ما در حال رفت و برگشت هستش این کار برامون انجام میشه و یکی بهش اضافه میشه .. اینطوری اگه عددمون 3 رقمی باشه counter مون 3 رو در خودش ذخیره میکنه . کدش به این صورت هست : CopyadadVoroodi=adadVoroodi while(CopyadadVoroodi>0) { CopyadadVoroodi=CopyadadVoroodi/10; counter++; }در قدم بعد دوباره عدد ورودیمون رو وارد متغیر کپی ای که به وجود اوردیم میکنیم و بعدش میریم سراغ حلقه while بعدی هدف از این حلقه این هستش که عدد های یکان و دهگگان و صدگان رقممون رو از هم جدا کنه و به توان برسونه مثلا اگه رقممون 153 باشه اون رو به عدد های 1 و 5 و 3 تجزیه کنه و هر کدام رو به توان 3 برسونه و بعد حاصل توان ها رو با هم جمع کنه . به همین دلیل اینجا میریم که متغیری دیگه به اسم تیکه عدد ورودی(tikeadadVoroodi) ایجاد کنیم . و بعد کپی عدد مون رو با مود بر ده گرفتن تجزیه میکنیم و وارد این متغیر جدیدمون میکنیم ( تیکه عدد ورودی ) در قدم بعد متغیر دیگه ای رو به اسم sum به وجود میاریم که قراره این تیکه ها رو که به توان میرسن با هم جمع کنه . در خط اخر این حلقه هم کپی عدد رو تقسیم بر ده میکنیم اینطوری در هر مرحله از حلقه عدد سمت راست حذف میشه و میریم سراغ بعدی .. کد رو حلقه رو میزارم و بعد یه توضیح کوچیک با مثلا راجع بهش میدم . while(CopyadadVoroodi>0) { tikeadadVoroodi=CopyadadVoroodi%10; sum=sum+(Math.pow(tikeadadVoroodi, counter)); CopyadadVoroodi=CopyadadVoroodi/10; }خب در خط اول این حلقه اگر عدد 153 رو در نظر بگیریم . مودش بر ده باعث میشه که عدد 3 رو در اختیار دااشته باشیم . سپس متغیر sum رو که تعریف کردیم و با استفاده از کتابخانه ریاضی عدد 3 رو که در متغیر tikeadadVoroodi ذخیره کرده بودیم رو به توان کانتری میرسونیم که در حلقه اول راجع بهش گفتیم . اینطوری 3 ما به توان سه میرسه . با خط سوم از حلقه 153 رو تقسیم بر ده میکنیم و به این صورت یکان رو حذف میکنیم و به این صورت عددمون رو برای این آماده میکنیم که بخوایم دهگانش یا همون عدد پنج رو وارد این داستان کنیم . عدد 5 و عدد 1 رو هم به همین منوال دنبال میکنیم . و همه این ها وقتی که به توان رسیده ان در متغیر sum با هم جمع میشن . if(adadVoroodi==sum) return true; else return false;در این قسمت ما میایم با استفاده از یک دستور شرطی میگیم که آیا sum ما با عدد ورودی که از کاربر گرفتیم با هم برابر هست یا ن . همان طور که در اول پست گفتم اگه برابر باشند نتیجه میگیریم که عددمون ، عدد آرمسترانگه . به همین زیبایی . همه این ها رو در یک تابع مینویسم به اسم isArmsrong و در تابع مین هم یک سری کد دیگه باید نوشت . که اون رو هم میگم . حالا کد کامل تابع isArmstrong رو به صورت کامل میذارم . static boolean isArmstrong(int adadVoroodi) { int counter = 0; int CopyadadVoroodi; int tikeadadVoroodi=0; double sum=0; CopyadadVoroodi=adadVoroodi; while(CopyadadVoroodi>0) { CopyadadVoroodi=CopyadadVoroodi/10; counter++; } CopyadadVoroodi=adadVoroodi; while(CopyadadVoroodi>0) { tikeadadVoroodi=CopyadadVoroodi%10; sum=sum+(Math.pow(tikeadadVoroodi, counter)); CopyadadVoroodi=CopyadadVoroodi/10; } if(adadVoroodi==sum) return true; else return false; }خب کد مین رو هم میذارم . و توضیحی خلاصه راجع بهش . public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.println(&quotadad voroodi ra vared konid&quot); int n=scan.nextInt(); isArmstrong(n); if(isArmstrong(n)) { System.out.print(&quotArmstrong &quot); } else { System.out.print(&quotNot Armstrong &quot); } }}در مین یک عدد از کاربر میگیریم و عدد رو وارد تابع isArmsrong و بعد تابع عدد رو بررسی میکنه . تابع ما از جنس بولین هست . پس ما در مین میگیم که اگر این تابع true بود بگو آرمسترانگه اگه false بود بگو آرمسترانگ نیست . به همین راحتی . کامپایل کد هم به این صورت هست .