Umut D.

Umut D.

Powered by Jekyll & Github

  • Coding-Challenges

  • Soru

    Programcıya, rastgele bir sayı (girilenSayi) veriliyor. Programcıdansa, ilgili sayının bir Armstrong sayısı -Narsist sayı- olup olmadığını bulan, eğer sonuç doğru ise “Evet, bu bir Armstrong sayısıdır.”, yanlış ise “Hayır, bu bir Armstrong sayısı değildir!” yazan bir program oluşturması isteniyor.

    Armstrong Sayısı, N haneli bir sayının basamaklarının n’inci üstlerinin toplamı, girilen sayının yine kendisine eşitse, bu türden sayı ya da sayılara Armstrong sayısı veya Narsist sayı denir. Örneğin; 153 sayısı, 3 hanelidir. İşlemsel olaraksa; 1^3 + 5^3 + 3^3 = 153 eder. Sayının kendisi, işlem sonucunda elde edilen sayıya eşit ise bu bir Armstrong sayısıdır.

    Örnek

    Girdi Çıktı
    girilenSayi: 100 Sonuç: Hayır, bu bir Armstrong sayısı değildir!
    girilenSayi: 1634 Sonuç: Evet, bu bir Armstrong sayısıdır.

    Çözüm - C#

    internal class Program
    {
        private static void Main(string[] args)
        {
            int girilenSayi = 1634;
     
            // Girilen sayıyı parçalarına ayırmak için her bir rakamı string değere dönüştür
            string sayi = Convert.ToString(girilenSayi);
            double toplam = 0;
     
            // Karakter uzunluğu boyunca döngü oluştur
            foreach (char karakter in sayi)
            {
                // Her bir karakterin (yani sayının üssünü al)
                // Üs sayısı Girilen Sayının uzunluğuna göre değişmekte
                toplam += Math.Pow((int) Char.GetNumericValue(karakter), sayi.Length);
            }
     
            // Eğere girilen sayı, elde edilen toplama eşit ise sayı bir Armstrong sayısıdır
            if (girilenSayi == toplam)
            {
                Console.WriteLine("Evet, bu bir Armstrong sayısıdır.");
            }
            else
            {
                // Eğere girilen sayı, elde edilen toplama eşit değilse sayı sıradan bir sayıdır 
                Console.WriteLine("Hayır, bu bir Armstrong sayısı değildir!");
            }
     
            Console.Read();
        }
    }
    

    Çözüm - Java

    public class Main {
        public static void main(String[] args) {
            int girilenSayi = 1634;
     
            // Girilen sayıyı parçalarına ayırmak için her bir rakamı string değere dönüştür
            String sayi = String.valueOf(girilenSayi);
            double toplam = 0;
     
            // Karakter uzunluğu boyunca döngü oluştur
            for (int i = 0; i < sayi.length(); i++)
            {
                // Her bir karakterin (yani sayının üssünü al)
                // Üs sayısı Girilen Sayının uzunluğuna göre değişmekte
                toplam += Math.pow(Character.getNumericValue(sayi.charAt(i)), sayi.length());
            }
     
            // Eğere girilen sayı, elde edilen toplama eşit ise sayı bir Armstrong sayısıdır
            if (girilenSayi == toplam)
            {
                System.out.println("Evet, bu bir Armstrong sayısıdır.");
            }
            else
            {
                // Eğere girilen sayı, elde edilen toplama eşit değilse sayı sıradan bir sayıdır
                System.out.println("Hayır, bu bir Armstrong sayısı değildir!");
            }
        }
    }