Проналажење збира цифара броја док збир не постане једноцифрен

Проналажење збира цифара броја док збир не постане једноцифрен
Пробајте на ГфГ пракси

Дати цео број н морамо више пута да пронађемо збир његових цифара док резултат не постане једноцифрени број.

Примери:

Улаз: н = 1234
Излаз: 1
Објашњење:
Корак 1: 1 + 2 + 3 + 4 = 10
Корак 2: 1 + 0 = 1

Улаз: н = 5674
Излаз: 4
Објашњење:
Корак 1: 5 + 6 + 7 + 4 = 22
Корак 2: 2 + 2 = 4

Садржај

[Наивни приступ] Репетитивним додавањем цифара

Приступ је фокусиран на израчунавање дигиталног простора т броја који је резултат вишеструког сабирања цифара док се не добије једноцифрена вредност. Ево како то концептуално функционише:

  1. Збројите цифре : Почните са сабирањем свих цифара датог броја.
  2. Проверите резултат : Ако је збир једноцифрени број (тј. мањи од 10) зауставите га и вратите га.
  3. Поновите процес : Ако је збир и даље већи од једне цифре, поновите поступак са збиром цифара. Ово се наставља све док се не постигне једноцифрени збир.
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  ));   

Излаз
1 

Временска сложеност: О(лог 10 н) док понављамо цифре броја.
Помоћни простор: О(1)

[Очекивани приступ] Коришћење математичке формуле

Знамо да се сваки број у децималном систему може изразити као збир његових цифара помножених степеном 10. На пример, број представљен као абцд може се написати на следећи начин:

абцд = а*10^3 + б*10^2 + ц*10^1 + д*10^0

Можемо раздвојити цифре и преписати ово као:
абцд = а + б + ц + д + (а*999 + б*99 + ц*9)
абцд = а + б + ц + д + 9*(а*111 + б*11 + ц)

Ово имплицира да се било који број може изразити као збир његових цифара плус вишекратник броја 9.
Дакле, ако узмемо модуло са 9 на свакој страни
абцд % 9 = (а + б + ц + д) % 9 + 0

То значи да је остатак када се абцд подели са 9 једнак остатку где је збир његових цифара (а + б + ц + д) подељен са 9.

Ако се сам збир цифара састоји од више од једне цифре, овај збир можемо даље изразити као збир његових цифара плус умножак 9. Према томе, узимање модула 9 ће елиминисати вишеструки број 9 све док збир цифара не постане једноцифрени број.

Као резултат тога, збир цифара било ког броја биће једнак његовом модулу 9. Ако је резултат операције по модулу нула, то значи да је једноцифрени резултат 9.
Да бисте сазнали о имплементацији кода, погледајте Дигитални корен (поновљени дигитални збир) датог великог целог броја