C# Armstrong Sayılarını Bulma

C# Armstrong Sayılarını Bulma

C# Armstrong Sayılarını Bulma

  4 dakika Okuma Süresi
Merhabalar, C# derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde Armstrong sayılarını bulmayı anlatacağım. Hadi başlayalım !

Öncelikle Armstrong sayılarından kısaca bahsedecek olursak; bir sayının her basamağının sayının toplam uzunluğu kadar kuvvetine alıp toplarsak ve toplam sonucu sayının kendisine eşit ise bu sayıya Armstrong sayısı denir.
Örneğin 153 sayısını düşünelim. 13+53+33=153 olduğundan 153 sayısı Armstrong sayısıdır.
Veya 1634 sayısını düşünelim. 14+64+34+44=1634 olduğundan bu sayı da Armstrong sayısıdır.
İşte bizde C# programlama dilini kullanarak kullanıcının girdiği sayının Armstrong sayısı olup olmadığını bulacak ve kullanıcıya bildireceğiz.

Öncelikle kullanıcıdan bir sayı isteyelim ve hem bu sayıyı hemde sayının uzunluğunu ayrı ayrı integer değişkenlere atayalım.

Console.Write("Sayı Giriniz: ");
int sayi = Convert.ToInt32(Console.ReadLine());
int uzunluk = sayi.ToString().Length;
Sayının uzunluğunu bulmayı şu yazımıza bakarak daha iyi anlayabilirsiniz :)
Şu ana kadar kullanıcıdan sayı aldık, sayıyı bi değişkene atadık ve sayının karakter sayısını da bulduk. Şimdi sayının her bir basamağını bulup sayının uzunluğu kadar üssünü alalım ve her üs almada bi tane integer değişkeni üssün değeri kadar arttıralım.
Son olarak başlangıçtaki sayı ile toplam sonucunu kıyaslayıp, eşit olup olmadığına bakalım. Eşitse "Sayı Armstrong Sayısıdır", değilse "Sayı Armstrong Sayısı Değildir" yazdıralım.

int baslangic = sayi;
int toplam = 0;
while(sayi != 0)
{
    int basamak = sayi % 10;
    toplam += Convert.ToInt32(Math.Pow(basamak, uzunluk));
    sayi /= 10;
}
if(toplam == baslangic)
    Console.WriteLine("Sayı Armstrong Sayıdır");
else
    Console.WriteLine("Sayı Armstrong Sayısı Değildir");
Sayıyı sürekli 10'a bölerek her işlenen yani üssü alınan basamağı attık, 10'a göre modunu alarakta o anki basamağı bulduk ve Math sınıfı altında bulunan Pow() fonksiyonu ile sayının basamak sayısına göre üssünü alıp toplam değişkenini üs sonucu kadar arttırdık.
Peki if bloğu içinde neden sayi değilde baslangic değişkenini kıyasladık, hatta o baslangic değişkeni nereden çıktı ? Şöyle anlatayım; farkettiyseniz while döngüsü içerisinde sayıyı sürekli 10'a böldük, yani başlangıçta kullanıcıdan aldığımız sayı while döngüsünden çıkıldığında sıfır olacak, yani değişecektir. Ama bize kullanıcının girdiği sayı lazım olduğu için o sayıyı aynı zamanda baslangic değişkenine atadık ve if bloğu içerisinde bu değişkeni kontrol ettik.

Evet bu dersimizde bu kadardı, yazdığımız kodları daha toplu olması için aşağıya bırakıyorum;

Console.Write("Sayı Giriniz: ");
int sayi = Convert.ToInt32(Console.ReadLine());
int uzunluk = sayi.ToString().Length;
int baslangic = sayi;
int toplam = 0;
while(sayi != 0)
{
    int basamak = sayi % 10;
    toplam += Convert.ToInt32(Math.Pow(basamak, uzunluk));
    sayi /= 10;
}
if(toplam == baslangic)
    Console.WriteLine("Sayı Armstrong Sayıdır");
else
    Console.WriteLine("Sayı Armstrong Sayısı Değildir");
Tüm C# derslerimize buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.


  • İçeriği Paylaş:

İÇERİĞİ DEĞERLENDİR

Toplam Değerlendirme Sayısı: 0
Toplam Değerlendirme: 0 / 5

Cevap Yaz