Nomor Armstrong dalam Program JAVA Menggunakan For Loop

⚡ Ringkasan Cerdas

Angka Armstrong sama dengan jumlah digitnya sendiri yang dipangkatkan dengan jumlah digitnya, dan kedua Java Program-program di bawah ini memeriksa satu nilai dan mencantumkan setiap angka Armstrong di bawah seribu.

  • 🔘 Definisi: Untuk bilangan n digit, setiap digit dipangkatkan dengan n dan hasilnya dijumlahkan.
  • ☑️ Contoh Kerja: 370 memenuhi syarat karena 3³ ditambah 7³ ditambah 0³ menghasilkan 370 tepat.
  • ✅ Digit Extraction: Operator modulo menghilangkan digit terakhir dan pembagian bilangan bulat memperpendek angka pada setiap proses.
  • 🧪 Dua Program: Yang satu menguji nilai tetap 153, yang lainnya melakukan perulangan melalui setiap angka dari 0 hingga 999.
  • ️ Batas yang Diketahui: Memangkatkan setiap digit dengan pangkat tiga hanya berlaku untuk nilai tiga digit, jadi rentang yang lebih luas membutuhkan pangkat n.
  • 📊 Kompleksitas: Kedua program berjalan dalam waktu O(d) per angka dan menggunakan memori tambahan O(1).

Nomor Armstrong di Java program yang menggunakan perulangan for

Apa itu Nomor Armstrong?

Dalam Bilangan Armstrong, jumlah pangkat masing-masing digit sama dengan bilangan itu sendiri.

Dengan kata lain persamaan berikut akan berlaku benar

xy..z = xn + yn+.....+ zn

n adalah jumlah digit dalam bilangan

Misalnya ini adalah 3 digit nomor Armstrong

370 = 33 + 73 + 03
 = 27 + 343 + 0
 = 370

Contoh Armstrong Numbers

0, 1, 4, 5, 9, 153, 371, 407, 8208, etc.

Setiap nilai satu digit dari 0 hingga 9 memenuhi aturan tersebut dengan mudah, karena angka satu digit yang dipangkatkan satu akan menghasilkan dirinya sendiri. Himpunan lengkap angka Armstrong tiga digit adalah 153, 370, 371, dan 407, sedangkan 1634, 8208, dan 9474 adalah anggota empat digitnya. Para matematikawan juga menyebut nilai-nilai ini sebagai angka narsistik, karena masing-masing angka tersebut mereproduksi dirinya sendiri dari digit-digitnya sendiri.

Mari kita tulis ini dalam sebuah program:

Bagaimana Algoritma Bilangan Armstrong Bekerja

Sebelum membaca kode, ada baiknya melihat perhitungan yang diulang oleh kedua program tersebut. Pemeriksaan hanya membutuhkan tiga operasi: menghilangkan digit terakhir, memangkatkannya dengan pangkat yang dibutuhkan, dan mengurangi angka satu tempat desimal.

  1. Salin input ke dalam file kerja. variabel sehingga nilai aslinya tetap ada untuk perbandingan akhir.
  2. Ambil angka terakhir dengan operator modulo, digit = tempNumber % 10.
  3. Pangkatkan angka tersebut dengan jumlah digit dan tambahkan ke total yang sedang berjalan.
  4. Hilangkan angka terakhir pada pembagian bilangan bulat, tempNumber /= 10.
  5. Ulangi hingga variabel kerja mencapai 0, lalu bandingkan total kumulatif dengan angka awal.

Menjalankan langkah-langkah tersebut sebanyak 153 kali menghasilkan trace di bawah ini. Setiap nilai dalam tabel dicetak oleh program pertama, sehingga output dapat dicocokkan baris demi baris saat mempelajari perulangan.

Lulus Nomor sementara angka digitCubeSum
1 153 3 27
2 15 5 152
3 1 1 153
Exit 0 - 153 sama dengan 153, jadi 153 adalah Bilangan Armstrong.

Satu keterbatasan penting. Kedua program tersebut mengalikan angka dengan dirinya sendiri tiga kali, yang merupakan pangkat yang benar hanya jika input memiliki tepat tiga digit. Aturan umumnya adalah memangkatkan setiap digit dengan pangkat n, di mana n adalah jumlah digit, sehingga nilai empat digit seperti 8208 membutuhkan pangkat keempat dan akan terlewatkan oleh kode berbasis kubus. Menghitung digit terlebih dahulu dan memangkatkan setiap digit dengan pangkat tersebutlah yang mengubah rutinitas tersebut menjadi pengujian umum.

Setelah perhitungan aritmatika selesai, program pertama menerapkannya pada satu nilai yang telah ditentukan sebelumnya.

Java Program untuk memeriksa apakah suatu bilangan adalah Nomor Armstrong

Kelas di bawah ini menyimpan kandidat di inputArmstrongNumber dan mencetak variabel kerja pada setiap proses, yang membuat Java Loop yang mudah diikuti di konsol.

//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");
	}
}

Kompilasi dan jalankan kelas dari direktori root proyek. Karena file tersebut mendeklarasikan package com.guru99, itu harus diletakkan di tempat yang sesuai com/guru99 folder, atau runtime melaporkan kesalahan kelas tidak ditemukan. Mengubah nilai pada inputArmstrongNumber Hanya satu baris yang dibutuhkan untuk menguji kandidat lain.

Keluaran

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

Memeriksa satu nilai dalam satu waktu berguna untuk tracNamun, logika yang sama berlaku untuk seluruh rentang dengan cara membungkusnya.ping dalam lingkaran luar.

Java Program untuk Mencetak angka Armstrong dari 0 hingga 999

Versi kedua mempertahankan bagian dalam yang identik. while perulangan dan menambahkan for jalur melingkar yang melintasi lapangan. Perhatikan bahwa digitCubeSum Nilainya diatur ulang ke 0 di bagian atas setiap proses, yang merupakan detail yang sering dilupakan oleh para pemula.

//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");
        }
    }
}

Keluaran

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

Daftar tersebut berhenti pada angka 1 dan tidak berlanjut hingga 9 karena pangkat tiga dari satu angka hanya cocok dengan angka itu sendiri untuk 0 dan 1. Memangkatkan setiap angka dengan jumlah angka tersebut akan menghasilkan kesepuluh nilai angka tunggal, yang merupakan generalisasi yang sama seperti yang dijelaskan sebelumnya.

Kedua daftar tersebut cukup singkat untuk dijadikan tolok ukur, sehingga biaya pendekatan ini perlu dinyatakan secara eksplisit.

Kompleksitas Waktu dan Ruang dari Program Angka Armstrong

Loop bagian dalam membagi variabel kerja dengan 10 pada setiap putaran, sehingga berjalan sekali per digit, bukan sekali per unit angka. Hal itu membuat pengecekan nilai tunggal menjadi sangat efisien, dan tetap efisien meskipun inputnya bertambah besar.

program Kompleksitas waktu Kompleksitas ruang
Periksa satu angka O(d), di mana d adalah jumlah digit O (1)
Pindai rentang N angka O(N × d) O (1)

Karena d sama dengan log10(angka) dibulatkan ke atas, pemeriksaan tunggal tersebut secara efektif bersifat logaritmik terhadap nilai yang diuji. Hanya tiga int Variabel tidak pernah dialokasikan, dan tidak ada array atau koleksi yang dibuat, itulah sebabnya biaya ruang tetap konstan tidak peduli seberapa besar rentangnya.

Berikut dua catatan praktis. Pertama, pemindaian rentang didominasi oleh N, sehingga mencetak angka Armstrong hingga satu juta biayanya kira-kira seribu kali lebih mahal daripada mencetaknya hingga seribu. Kedua, sebuah int Nilainya melebihi 2,147,483,647, sehingga pencarian di rentang yang sangat besar diperlukan. long untuk kandidat dan jumlah kumulatif. Digit yang sama-extracPola tion muncul di banyak latihan pemula, termasuk pengecekan bilangan prima, yang deret fibonacci latihan program dan susunan seperti semacam gelembung ke jenis penyisipan.

Pertanyaan Umum Demo Slot

Ya. Memangkatkan setiap digit menjadi tiga menghasilkan 27 ditambah 343 ditambah 1, yang jika dijumlahkan hasilnya 371, sehingga nilainya berulang. Program rentang di atas mencetaknya bersamaan dengan 153, 370, dan 407.

Nama tersebut mencerminkan sifatnya sendiri: angka tersebut dibangun sepenuhnya dari digit-digitnya sendiri, sehingga tampak seperti mengagumi bayangannya sendiri. Kedua istilah tersebut menggambarkan aturan yang sama, dan jumlah pangkat digit terkadang disebut sebagai invarian digital pluperfect.

Ada tiga: 1634, 8208, dan 9474. Setiap digit dipangkatkan empat karena nilainya memiliki empat digit. Kode berbasis kubus tidak dapat mendeteksinya, itulah sebabnya eksponen harus mengikuti jumlah digit.

Bilangan sempurna sama dengan jumlah pembagi sejatinya, jadi 6 memenuhi syarat melalui 1 ditambah 2 ditambah 3. Bilangan Armstrong sama dengan jumlah pangkat digitnya. Kedua definisi tersebut tidak memiliki kesamaan aritmatika dan jarang tumpang tindih.

Math.pow() mengembalikan nilai double, sehingga diperlukan konversi kembali ke int dan kesalahan pembulatan mungkin terjadi. Untuk kubus tetap, digit*digit*digit lebih cepat dan akurat. Math.pow() hanya berguna ketika eksponen bervariasi dengan jumlah digit.

Ya. Metode pembantu dapat mengambil nilai kerja, menambahkan digit terakhir yang dipangkatkan ke akumulator, dan memanggil dirinya sendiri dengan angka yang dibagi 10. Kode ini mudah dibaca, meskipun versi perulangan menghindari frame tumpukan tambahan.

Asisten modern dapat menghasilkan pass-by-pass. trace, nyatakan kembali perulangan dalam bahasa yang sederhana dan sarankan kasus-kasus khusus seperti 0 atau input negatif. Verifikasi trace dibandingkan dengan output konsol sebenarnya, karena panduan yang dihasilkan terkadang melewatkan satu iterasi.

Kopilot GitHub Biasanya, perulangan diselesaikan hanya dari nama metodenya saja, tetapi sering kali memasukkan nilai kubus secara langsung. Nyatakan persyaratan jumlah digit dalam perintah, kemudian kompilasi dan uji saran tersebut sebelum mempercayainya.

Ringkaslah postingan ini dengan: