Java Mini Proje 002 - Bir Sayının Basamakları Toplamını Bulma


   Bir sayının basamakları toplamını bulmadan önce yapmamız gerek ilk iş sayının basamaklarına ayırmaktır.

Peki bir sayıyı basamaklarına nasıl ayırırız ?

   Bu problemi gerçek hayatta çözerken her bir rakamı direkt olarak topluyorduk.Bunu şimdi bilgisayara yaptırmamız gerekli.Sayının en sağından başladığımızı varsayalım.En sağdaki rakamı nasıl elde ederiz ? Tabi ki de mod alma ile.Bir sayı mod 10 ile işleme sokulduğunda o sayının 10'a bölümünden kalanı verir.

   Şimdi yapmamız gereken artık sağdan ikinci rakamı elde etmek.Ama mod 10 ifadesi bize sayının ilk rakamını veriyordu.Biz ikinci rakamı elde etmek istiyoruz.Bunun için yapmamız gereken sayıyı 10'a bölmektir.Sayıyı 10'a bölersek sayının en sağdaki ilk rakamından kurtulmuş oluruz.Böylece sayının ikinci rakamı artık sayının ilk rakamı olmuş olur.Artık bu sayıya mod 10 ile işleme sokarsak başta bize verilen sayının sağdan ikinci rakamını elde etmiş oluruz.

Bu işlemler ne zamana kadar sürecek ?
  
   Bu işlemler ta ki sayının 10'a bölümünden elde edilen sonuç 1 veya 1'den büyük olmayıncaya , yani 0 oluncaya kadar sürecektir.Bunu daha iyi anlamak için şu örneği düşünün.Elinizde yukardaki işlemleri yaptığınızda kala kala 9 rakamı kaldı.10'a böldünüz.Sonuç 0 çıktı.Artık yukardaki işlemler bitmiştir.Yapmanız gereken tek şey o 9 olan rakamı yani bu sayınızın en solundaki 9 olan rakamı diğer topladığınız elemanlar gibi toplayıp işlemi tamamiyle bitirmektir.

* Sayıyı 10'a bölmek yerine >> shift operatörünü kullanabilirsiniz.

Bu anlatılanların koda dönüştürülmüş hali aşağıdadır.

Main.java
package test;

public class Main {

 public static void main(String[] args) {
  System.out.println("0\t->\t" + basamaklarToplamiBul(0));
  System.out.println("1\t->\t" + basamaklarToplamiBul(1));
  System.out.println("12\t->\t" + basamaklarToplamiBul(12));
  System.out.println("123\t->\t" + basamaklarToplamiBul(123));
  System.out.println("1234\t->\t" + basamaklarToplamiBul(1234));
  System.out.println("123405\t->\t" + basamaklarToplamiBul(123405));
  System.out.println("991099\t->\t" + basamaklarToplamiBul(991099));
 }

 public static int basamaklarToplamiBul(int sayi) {
  int toplam = 0;

  while (sayi / 10 >= 1) {
   toplam += sayi % 10;
   sayi = sayi / 10;
  }

  toplam += sayi;

  return toplam;
 }
}


Yorumlar

Bu blogdaki popüler yayınlar

Java SE Ders24 - Composition (Kompozisyon)

Spring Ders20 - Aspect Oriented Programming - AspectJ Annotation Style

JSF Ders30 - Page Template (Sayfa Şablonu)