بررسی آرمسترانگ بودن عدد . . با جاوا
اول از همه بریم سراغ اینکه عدد آرمسترانگ چه عددیه ..
فک کنم مثال های پایین به خوبی این رو توضیح بده .. . :
یعنی اول باید دید عددمون چند رقمیه . .
بعد هر کدام از یکان ، دهگان و صدگان و .. رو به توان میرسانیم . مثلا اگه عددمون 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("adad voroodi ra vared konid");
int n=scan.nextInt();
isArmstrong(n);
if(isArmstrong(n)) {
System.out.print("Armstrong ");
}
else
{
System.out.print("Not Armstrong ");
}
}
}
در مین یک عدد از کاربر میگیریم و عدد رو وارد تابع isArmsrong و بعد تابع عدد رو بررسی میکنه .
تابع ما از جنس بولین هست .
پس ما در مین میگیم که اگر این تابع true بود بگو آرمسترانگه
اگه false بود بگو آرمسترانگ نیست . به همین راحتی .
کامپایل کد هم به این صورت هست .