JAVA Programında For Döngüsü Kullanan Armstrong Sayısı
⚡ Akıllı Özet
Armstrong sayıları, kendi rakamlarının rakam sayısının kuvvetine yükseltilmiş hallerinin toplamına eşittir ve iki rakamın toplamı da bu kuvvete yükseltilmiş halde bulunur. Java Aşağıdaki programlar tek bir değeri kontrol eder ve binin altındaki tüm Armstrong sayılarını listeler.

Armstrong Sayısı Nedir?
Armstrong Sayısında her bir rakamın kuvvetlerinin toplamı sayının kendisine eşittir.
Başka bir deyişle, aşağıdaki denklem doğru olacaktır
xy..z = xn + yn+.....+ zn
n sayıdaki basamak sayısıdır
Örneğin bu 3 haneli bir Armstrong numarasıdır
370 = 33 + 73 + 03 = 27 + 343 + 0 = 370
Armstrong örnekleri Numbers
0, 1, 4, 5, 9, 153, 371, 407, 8208, etc.
0'dan 9'a kadar olan her tek basamaklı sayı, kuralı kolayca karşılar, çünkü tek basamaklı bir sayının birinci kuvvete yükseltilmesi kendisini verir. Üç basamaklı Armstrong sayılarının tam kümesi 153, 370, 371 ve 407 iken, dört basamaklı üyeleri 1634, 8208 ve 9474'tür. Matematikçiler bu değerlere narsisistik sayılar da derler, çünkü her biri kendi rakamlarından kendisini yeniden üretir.
Bunu bir programa yazalım:
Armstrong Sayısı Algoritması Nasıl Çalışır?
Kodu okumadan önce, her iki programın da tekrarladığı aritmetik işlemleri görmek faydalı olacaktır. Kontrol işlemi yalnızca üç adımdan oluşur: son rakamı kaldırmak, sayıyı gerekli kuvvete yükseltmek ve sayıyı bir basamak kısaltmak.
- Girdiğiniz girdiyi bir çalışma alanına kopyalayın. değişken Bu sayede orijinal değer nihai karşılaştırma için korunmuş olur.
- Son rakamı modül operatörüyle alın,
digit = tempNumber % 10. - O rakamı rakam sayısının kuvvetine yükseltin ve toplam rakama ekleyin.
- Tam sayı bölme işleminde son rakamı atın.
tempNumber /= 10. - Çalışma değişkeni 0'a ulaşana kadar işlemi tekrarlayın, ardından elde edilen toplamı orijinal sayıyla karşılaştırın.
Bu adımları 153 üzerinden çalıştırmak şu sonucu verir: tracAşağıda e harfi yer almaktadır. Tablodaki her değer ilk program tarafından yazdırılır, böylece döngüyü öğrenirken çıktı satır satır eşleştirilebilir.
| Geçiş | geçiciNumara | basamak | digitCubeSum |
| 1 | 153 | 3 | 27 |
| 2 | 15 | 5 | 152 |
| 3 | 1 | 1 | 153 |
| Çıkış | 0 | - | 153, 153'e eşittir, dolayısıyla 153 bir Armstrong sayısıdır. |
Önemli bir sınırlama. Her iki program da rakamı kendisiyle üç kez çarpar; bu, yalnızca giriş tam olarak üç basamaklı olduğunda doğru kuvvettir. Genel kural, her rakamı n. kuvvete yükseltmektir; burada n, rakam sayısıdır. Dolayısıyla, 8208 gibi dört basamaklı bir değer dördüncü bir kuvvete ihtiyaç duyar ve küp tabanlı kod tarafından gözden kaçırılır. Önce rakamları sayıp her birini o kuvvete yükseltmek, rutini genel bir teste dönüştürür.
Hesaplamalar tamamlandıktan sonra, ilk program bunu tek bir sabit kodlanmış değere uygular.
Java Bir sayının Armstrong Sayısı olup olmadığını kontrol eden program
Aşağıdaki sınıf adayı şu şekilde saklar: inputArmstrongNumber ve her geçişte çalışma değişkenlerini yazdırır, bu da şunu sağlar: Java Konsolda takip edilmesi kolay döngü.
//ChecktempNumber is Armstrong or not using while loop package com.guru99; public class ArmstrongNumber { public static void main(String[] args) { int inputArmstrongNumber = 153; //Input number to check armstrong int tempNumber, digit, digitCubeSum = 0; tempNumber = inputArmstrongNumber; while (tempNumber != 0) { /* On each iteration, remainder is powered by thetempNumber of digits n */ System.out.println("Current Number is "+tempNumber); digit =tempNumber % 10; System.out.println("Current Digit is "+digit); //sum of cubes of each digits is equal to thetempNumber itself digitCubeSum = digitCubeSum + digit*digit*digit; System.out.println("Current digitCubeSum is "+digitCubeSum); tempNumber /= 10; } //check giventempNumber and digitCubeSum is equal to or not if(digitCubeSum == inputArmstrongNumber) System.out.println(inputArmstrongNumber + " is an Armstrong Number"); else System.out.println(inputArmstrongNumber + " is not an Armstrong Number"); } }
Sınıfı proje kök dizininden derleyin ve çalıştırın. Çünkü dosya şunu bildiriyor: package com.guru99Eşleşen bir yerde durması gerekiyor. com/guru99 klasörde veya çalışma zamanı sınıf bulunamadı hatası veriyor. Değeri değiştirmek inputArmstrongNumber Bir başka adayı test etmek için sadece bir satır yeterlidir.
Çıktı
Current Number is 153 Current Digit is 3 Current digitCubeSum is 27 Current Number is 15 Current Digit is 5 Current digitCubeSum is 152 Current Number is 1 Current Digit is 1 Current digitCubeSum is 153 153 is an Armstrong Number
Değerleri tek tek kontrol etmek şu açılardan faydalıdır: tracAncak aynı mantık, sarmalama yoluyla çok çeşitli alanlara uygulanabilir.ping Bunu dış bir döngüye yerleştirin.
Java 0'dan 999'a kadar Armstrong sayılarını yazdıran program
İkinci versiyon aynı iç yapıyı koruyor. while döngü ve bir ekler for Aralık boyunca dolaşan bir döngü. Şunu unutmayın ki... digitCubeSum Her geçişin başında sıfırlanır; bu, çoğu acemi kullanıcının unuttuğu bir detaydır.
//ChecktempNumber is Armstrong or not using while loop package com.guru99; public class ArmstrongNumber { public static void main(String[] args) { int tempNumber, digit, digitCubeSum; for (int inputArmstrongNumber = 0; inputArmstrongNumber < 1000; inputArmstrongNumber++) { tempNumber = inputArmstrongNumber; digitCubeSum = 0; while (tempNumber != 0) { /* On each iteration, remainder is powered by thetempNumber of digits n */ digit = tempNumber % 10; //sum of cubes of each digits is equal to thetempNumber itself digitCubeSum = digitCubeSum + digit * digit * digit; tempNumber /= 10; } //check giventempNumber and digitCubeSum is equal to or not if (digitCubeSum == inputArmstrongNumber) System.out.println(inputArmstrongNumber + " is an Armstrong Number"); } } }
Çıktı
0 is an Armstrong Number 1 is an Armstrong Number 153 is an Armstrong Number 370 is an Armstrong Number 371 is an Armstrong Number 407 is an Armstrong Number
Liste 9'a kadar devam etmek yerine 1'de duruyor çünkü tek basamaklı bir sayının küpü yalnızca 0 ve 1 için rakamın kendisiyle eşleşiyor. Bunun yerine her rakamı rakam sayısının kuvvetine yükseltmek, daha önce açıklanan genellemeyle aynı olan on tek basamaklı değerin tamamını döndürür.
Her iki liste de kıyaslama için yeterince kısa olduğundan, yaklaşımın maliyetini açıkça belirtmekte fayda var.
Armstrong Sayısı Programının Zaman ve Mekan Karmaşıklığı
İç döngü, her geçişte çalışma değişkenini 10'a böler, bu nedenle sayının her birimi için bir kez değil, her basamak için bir kez çalışır. Bu, tek değer kontrolünü son derece ucuz hale getirir ve girdi arttıkça da ucuz kalır.
| Programı | Zaman karmaşıklığı | Alan karmaşıklığı |
| Bir numarayı işaretleyin | O(d), burada d basamak sayısıdır. | O (1) |
| N sayıdan oluşan bir aralığı tarayın. | O(N × d) | O (1) |
Çünkü d logaritmaya eşittir.10(Sayı) yukarı yuvarlandığında, tek kontrol, test edilen değere göre etkili bir şekilde logaritmiktir. Sadece üç int Değişkenlere hiçbir zaman bellek tahsis edilmez ve hiçbir dizi veya koleksiyon oluşturulmaz; bu nedenle, aralık ne kadar büyük olursa olsun, alan maliyeti sabit kalır.
Bundan iki pratik sonuç çıkarılabilir. Birincisi, aralık taraması N'ye bağlıdır, bu nedenle Armstrong sayılarını bir milyona kadar yazdırmak, bin'e kadar yazdırmaktan yaklaşık bin kat daha pahalıdır. İkincisi, bir int 2,147,483,647'nin üzerinde taşma meydana geliyor, bu nedenle çok geniş aralıklarda arama yapılması gerekiyor. long Hem aday hem de toplam için aynı rakam geçerlidir.tracBu kalıp, başlangıç seviyesindeki birçok alıştırmada karşımıza çıkar, bunlar arasında şunlar da bulunur: asal sayı kontrolü, Fibonacci serisi program ve dizi alıştırmaları gibi kabarcık sıralaması hem de ekleme türü.
