Skaitļa ciparu summas atrašana, līdz summa kļūst par viencipara skaitli

Skaitļa ciparu summas atrašana, līdz summa kļūst par viencipara skaitli
Izmēģiniet to GfG Practice

Dots vesels skaitlis n, mums atkārtoti jāatrod tā ciparu summa, līdz rezultāts kļūst par viencipara skaitli.

Piemēri:

Ievade: n = 1234
Izvade: 1
Paskaidrojums:
1. darbība: 1 + 2 + 3 + 4 = 10
2. darbība: 1 + 0 = 1

Ievade: n = 5674
Izvade: 4
Paskaidrojums:
1. darbība: 5 + 6 + 7 + 4 = 22
2. darbība: 2 + 2 = 4

Satura rādītājs

[Naiva pieeja] Atkārtoti pievienojot ciparus

Šī pieeja ir vērsta uz digitālā Roo aprēķināšanu t skaitļa, ko iegūst, atkārtoti summējot ciparus, līdz tiek iegūta viencipara vērtība. Lūk, kā tas darbojas konceptuāli:

  1. Summējiet ciparus : Sāciet, pievienojot visus dotā skaitļa ciparus.
  2. Pārbaudiet rezultātu : ja summa ir viencipara skaitlis (t.i., mazāka par 10), apturiet un atgrieziet to.
  3. Atkārtojiet procesu : Ja summa joprojām ir vairāk nekā viens cipars, atkārtojiet procesu ar ciparu summu. Tas turpinās, līdz tiek sasniegta viencipara summa.
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  ));   

Izvade
1 

Laika sarežģītība: O(log 10 n) atkārtojot pāri skaitļa cipariem.
Palīgtelpa: O(1)

[Paredzamā pieeja] Izmantojot matemātisko formulu

Mēs zinām, ka katru skaitli decimālajā sistēmā var izteikt kā tā ciparu summu, kas reizināta ar pakāpēm 10. Piemēram, skaitlis, kas attēlots kā abcd var rakstīt šādi:

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

Mēs varam atdalīt ciparus un pārrakstīt to šādi:
abcd = a + b + c + d + (a*999 + b*99 + c*9)
abcd = a + b + c + d + 9*(a*111 + b*11 + c)

Tas nozīmē, ka jebkuru skaitli var izteikt kā tā ciparu summu plus 9 reizinātājs.
Tātad, ja mēs ņemam modulo ar 9 katrā pusē
abcd % 9 = (a + b + c + d) % 9 + 0

Tas nozīmē, ka atlikums, kad abcd tiek dalīts ar 9, ir vienāds ar atlikumu, kurā tā ciparu summa (a + b + c + d) tiek dalīta ar 9.

Ja pati ciparu summa sastāv no vairāk nekā viena cipara, mēs tālāk varam izteikt šo summu kā tās ciparu summu plus 9 daudzkārtni. Līdz ar to, ņemot modulo 9, tiks izslēgts skaitļa 9 daudzkārtnis, līdz ciparu summa kļūs par viencipara skaitli.

Rezultātā jebkura skaitļa ciparu summa būs vienāda ar tā modulo 9. Ja moduļa darbības rezultāts ir nulle, tas norāda, ka viencipara rezultāts ir 9.
Lai uzzinātu par koda ieviešanu, skatiet Dotā lielā veselā skaitļa digitālā sakne (atkārtota ciparu summa).