Java Soru Çözümü : Girilen Sayının Basamak Sayısı Kadar Üssünü Alma

Merhaba arkadaşlar bugün yine javada bir soru çözeceğiz ama bu sefer başka bir arkadaşın yaptığı çözümü düzenleyip yaptım.Arkadaşın postu için şu linkle tıklayabilirsiniz.==> HedefLink

Ben sadece arkadaşın yazdığı metodu rekürsif hale getirip yazdım.Onun dışında kod arkadaşa aittir..

Sorumuz şu:Klavyeden girilen sayının basamak değerinine göre üssünü alan ve bunların toplamını dönderen bir program yazınız.

Yani soldan başlayıp 1 2 3..diye sayacağız basamakları,sıralayla bunları basamak indexi kadar üssünü alıp toplayacağız.

Örnek : 124 ==> 4,1.basamakta ==> 2, 2.basamakta ==> 1,3.basamakta..O zaman (4^1)+(2^2)+(1^3) =9 olur

Bu kodu yazarken arkadaş rekürsif olarak üst alma fonksiyonu tanımlamış.Bu fonksiyon taban ve us diye iki paramaetre alıyor ve üs kadar tabanı kendiyle çarpıyor..Ben de hesapla fonksiyonunda her seferinde sayının 10 a göre modunu üs fonksiyonuna yolladım(Basamakları ayrıştırmak için 10 a göre modunu alıyoruz),sonra sayıyı 10 a bölüp tekrar aynı fonksiyon içinde çağırdım..basIndex değişkeni de bizim basamakIndeximizi veriyor,javadakinin aksine burda indexleri 1 den başlattık..Kodumuz şöyle:


import java.util.Scanner;

public class BasamakUsAlma {

public static void main(String[] args) {
try {
int sayi;
System.out.print("Sayıyı giriniz : ");
Scanner scn = new Scanner(System.in);
sayi = scn.nextInt();
System.out.println("Sonuç : " + hesapla(sayi, 1));
} catch (Exception ex) {
System.out.println("Yanlış işlem yaptınız!");
main(null);
}
}

public static int hesapla(int sayi, int basIndex) {
if (sayi <= 0) {
return 0;
} else {
return us(sayi % 10, basIndex++) + hesapla(sayi / 10, basIndex);
}
}

public static int us(int taban, int us) {
if (us >= 1) {
return taban * us(taban, us - 1);
}
return 1;
}

Çıktı:

run:
Sayıyı giriniz : 124
Sonuç : 9
BUILD SUCCESSFUL (total time: 3 seconds)

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir