Bir sayının rakamlarının toplamı tek rakam oluncaya kadar bulma

Bir sayının rakamlarının toplamı tek rakam oluncaya kadar bulma
GfG Practice'de deneyin

Bir n tamsayısı verildiğinde, sonuç tek basamaklı bir sayı oluncaya kadar basamaklarının toplamını tekrar tekrar bulmamız gerekir.

Örnekler:

Giriş: sayı = 1234
Çıkış: 1
Açıklama:
Adım 1: 1 + 2 + 3 + 4 = 10
Adım 2: 1 + 0 = 1

Giriş: sayı = 5674
Çıkış: 4
Açıklama:
Adım 1: 5 + 6 + 7 + 4 = 22
Adım 2: 2 + 2 = 4

İçerik Tablosu

[Naif Yaklaşım] Rakamları Tekrarlayarak Ekleyerek

Yaklaşım dijital RO'nun hesaplanmasına odaklanmıştır. T Tek basamaklı bir değer elde edilinceye kadar rakamların tekrar tekrar toplanması sonucu oluşan sayının adı. Kavramsal olarak şu şekilde çalışır:

  1. Rakamları topla : Verilen sayının tüm rakamlarını toplayarak başlayın.
  2. Sonucu kontrol edin : Toplam tek haneli bir sayı ise (yani 10'dan küçükse) durdurun ve geri döndürün.
  3. İşlemi tekrarlayın : Toplam hala tek rakamdan fazla ise rakamların toplamı ile işlemi tekrarlayın. Bu, tek haneli bir toplam elde edilene kadar devam eder.
C++
   // C++ program to find the digit sum by    // repetitively Adding its digits   #include          using     namespace     std  ;   int     singleDigit  (  int     n  )     {      int     sum     =     0  ;      // Repetitively calculate sum until      // it becomes single digit      while     (  n     >     0     ||     sum     >     9  )     {      // If n becomes 0 reset it to sum       // and start a new iteration.      if     (  n     ==     0  )     {      n     =     sum  ;      sum     =     0  ;      }      sum     +=     n     %     10  ;      n     /=     10  ;      }      return     sum  ;   }   int     main  ()     {      int     n     =     1234  ;      cout      < <     singleDigit  (  n  );      return     0  ;   }   
C
   // C program to find the digit sum by    // repetitively Adding its digits   #include         int     singleDigit  (  int     n  )     {      int     sum     =     0  ;      // Repetitively calculate sum until      // it becomes single digit      while     (  n     >     0     ||     sum     >     9  )     {      // If n becomes 0 reset it to sum       // and start a new iteration.      if     (  n     ==     0  )     {      n     =     sum  ;      sum     =     0  ;      }      sum     +=     n     %     10  ;      n     /=     10  ;      }      return     sum  ;   }   int     main  ()     {      int     n     =     1234  ;      printf  (  '%d'       singleDigit  (  n  ));      return     0  ;   }   
Java
   // Java program to find the digit sum by    // repetitively Adding its digits   class   GfG     {      static     int     singleDigit  (  int     n  )     {      int     sum     =     0  ;      // Repetitively calculate sum until      // it becomes single digit      while     (  n     >     0     ||     sum     >     9  )     {      // If n becomes 0 reset it to sum       // and start a new iteration.      if     (  n     ==     0  )     {      n     =     sum  ;      sum     =     0  ;      }      sum     +=     n     %     10  ;      n     /=     10  ;      }      return     sum  ;      }      public     static     void     main  (  String  []     args  )     {      int     n     =     1234  ;      System  .  out  .  println  (  singleDigit  (  n  ));      }   }   
Python
   # Python program to find the digit sum by    # repetitively Adding its digits   def   singleDigit  (  n  ):   sum   =   0   # Repetitively calculate sum until   # it becomes single digit   while   n   >   0   or   sum   >   9  :   # If n becomes 0 reset it to sum    # and start a new iteration   if   n   ==   0  :   n   =   sum   sum   =   0   sum   +=   n   %   10   n   //=   10   return   sum   if   __name__   ==   '__main__'  :   n   =   1234   print  (  singleDigit  (  n  ))   
C#
   // C# program to find the digit sum by    // repetitively Adding its digits   using     System  ;   class     GfG     {      static     int     singleDigit  (  int     n  )     {      int     sum     =     0  ;      // Repetitively calculate sum until      // it becomes single digit      while     (  n     >     0     ||     sum     >     9  )     {      // If n becomes 0 reset it to sum       // and start a new iteration.      if     (  n     ==     0  )     {      n     =     sum  ;      sum     =     0  ;      }      sum     +=     n     %     10  ;      n     /=     10  ;      }      return     sum  ;      }      static     void     Main  ()     {      int     n     =     1234  ;      Console  .  WriteLine  (  singleDigit  (  n  ));      }   }   
JavaScript
   // JavaScript program to find the digit sum by    // repetitively Adding its digits   function     singleDigit  (  n  )     {      let     sum     =     0  ;      // Repetitively calculate sum until      // it becomes single digit      while     (  n     >     0     ||     sum     >     9  )     {      // If n becomes 0 reset it to sum       // and start a new iteration.      if     (  n     ===     0  )     {      n     =     sum  ;      sum     =     0  ;      }      sum     +=     n     %     10  ;      n     =     Math  .  floor  (  n     /     10  );      }      return     sum  ;   }   // Driver Code   const     n     =     1234  ;   console  .  log  (  singleDigit  (  n  ));   

Çıkış
1 

Zaman Karmaşıklığı: O(günlük 10 n) sayının rakamları üzerinde yineleme yaptığımız için.
Yardımcı Alan: Ç(1)

[Beklenen Yaklaşım] Matematiksel Formül Kullanma

Ondalık sistemdeki her sayının, rakamlarının toplamının 10'un kuvvetleriyle çarpılmasıyla ifade edilebileceğini biliyoruz. Örneğin, şu şekilde temsil edilen bir sayı: abcd aşağıdaki gibi yazılabilir:

abcd = a*10^3 + b*10^2 + c*10^1 + d*10^0

Rakamları ayırıp bunu şu şekilde yeniden yazabiliriz:
abcd = a + b + c + d + (a*999 + b*99 + c*9)
abcd = a + b + c + d + 9*(a*111 + b*11 + c)

Bu, herhangi bir sayının, rakamlarının toplamı artı 9'un katı olarak ifade edilebileceği anlamına gelir.
Yani her iki tarafta 9'lu modulo alırsak
abcd % 9 = (a + b + c + d) % 9 + 0

Bu, abcd'nin 9'a bölümünden kalanın, rakamlarının toplamının (a + b + c + d) 9'a bölümünden kalana eşit olduğu anlamına gelir.

Rakamların toplamı birden fazla rakamdan oluşuyorsa, bu toplamı rakamlarının toplamı artı 9'un katı olarak da ifade edebiliriz. Sonuç olarak modulo 9'u almak, rakamların toplamı tek haneli sayı haline gelene kadar 9'un katlarını ortadan kaldıracaktır.

Sonuç olarak herhangi bir sayının rakamlarının toplamı modulo 9'a eşit olacaktır. Modulo işleminin sonucu sıfır ise bu tek haneli sonucun 9 olduğunu gösterir.
Kod uygulaması hakkında bilgi edinmek için bkz. Verilen büyük tam sayının Dijital Kökü (tekrarlanan dijital toplam)