logo

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

Izmēģiniet to GfG Practice ' title=

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(log10n) 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).