Amir_B
Amir_B
خواندن ۴ دقیقه·۳ سال پیش

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 بود بگو آرمسترانگ نیست . به همین راحتی .

کامپایل کد هم به این صورت هست .


javaisarmstrongjava problems
دانشجوی کارشناسی کامپیوتر
شاید از این پست‌ها خوشتان بیاید