C++ Armstrong Sayısı mı?
C++ ile yapılabilecek girilen sayının bir armstrong sayısı olup olmadığını söyleyen programıdır.
PROBLEM;
Armstrong sayıları, bir sayının her bir rakamının sayının toplam basamak sayısı kadar üstü ile toplanması sonucunda çıkan sayı ile başlangıçtaki sayının eşit olduğu sayılardır. Yani;
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1+125+27 = 153
Kullanıcıdan bir sayı isteyin. Burada basamak sayısının önemsiz olduğuna dikkat edin. Kullanıcı isteğe bağlı olarak bir sayı seçebilir. Ardından sayının armstrong sayısı olup olmadığını kullanıcıya belirtin.
ÇÖZÜM 1 (Kullanıcı 50 basamağa kadar giriş yapabilir);
int main(){
int karakter,toplam=0,a,b=1,deger=1,sayi=0;
char armstrong[50];
cout << "Bir sayi girin: ";
cin >> armstrong;
karakter = strlen(armstrong);
for(int i=0; i<karakter; i++) {
a = armstrong[i];
a -= 48; // Char olan armstrong'u int değere dönüştürürken
for(int k=0; k<karakter; k++) {
b = b*a;
}
toplam += b;
b=1;
for(int j=1; j<karakter-i; j++) {
deger *= 10;
}
deger *= a;
sayi += deger;
deger = 1;
}
if(toplam == sayi) {
cout << "--> " << armstrong << " bir armstrong sayidir!\n\n";
return main();
} else {
cout << "--> " << armstrong << " bir armstrong sayisi degildir!\n\n";
return main();
}
}
ÇÖZÜM 2 (Kullanıcı yalnızca 4 basamaklı sayıları girebilir);
int main(){
int a,b,c,d,armstrong;
cout << "4 basamakli bir sayi girin: ";
cin >> armstrong;
if(armstrong > 999 && armstrong < 10000) {
a = armstrong/1000;
b = (armstrong%1000)/100;
c = (armstrong%100)/10;
d = armstrong%10;
if( (a*a*a*a) + (b*b*b*b) + (c*c*c*c) + (d*d*d*d) == armstrong ) {
cout << endl << armstrong << " bir armstrong sayidir!";
} else {
cout << endl << armstrong << " bir armstrong sayisi degildir!";
}
} else {
cout << endl;
return main();
}
}