logo

Određivanje zbroja znamenki broja dok zbroj ne postane jednoznamenkasti

Isprobajte na GfG Practice ' title=

Za cijeli broj n trebamo iznova pronaći zbroj njegovih znamenki sve dok rezultat ne postane jednoznamenkasti broj.

Primjeri:

Ulazni: n = 1234
Izlaz: 1
Obrazloženje:
1. korak: 1 + 2 + 3 + 4 = 10
2. korak: 1 + 0 = 1



Ulazni: n = 5674
Izlaz: 4
Obrazloženje:
1. korak: 5 + 6 + 7 + 4 = 22
2. korak: 2 + 2 = 4

Sadržaj

[Naivni pristup] Uzastopnim zbrajanjem znamenki

Pristup je usmjeren na izračun digitalnog rooa t broja koji je rezultat uzastopnog zbrajanja znamenki dok se ne dobije jednoznamenkasta vrijednost. Evo kako to konceptualno funkcionira:



  1. Zbrojite znamenke : Započnite dodavanjem svih znamenki zadanog broja.
  2. Provjerite rezultat : Ako je zbroj jednoznamenkasti broj (tj. manji od 10) zaustavite se i vratite ga.
  3. Ponovite postupak : Ako je zbroj još uvijek veći od jedne znamenke, ponovite postupak sa zbrojem znamenki. To se nastavlja sve dok se ne postigne jednoznamenkasti zbroj.
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)); 

Izlaz
1

Vremenska složenost: O(log10n) dok ponavljamo znamenke broja.
Pomoćni prostor: O(1)

[Očekivani pristup] Korištenje matematičke formule

Znamo da se svaki broj u decimalnom sustavu može izraziti kao zbroj njegovih znamenki pomnoženih potencijama broja 10. Na primjer, broj predstavljen kao abcd može se napisati na sljedeći način:

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

Možemo odvojiti znamenke i prepisati ovo kao:
abcd = a + b + c + d + (a*999 + b*99 + c*9)
abcd = a + b + c + d + 9*(a*111 + b*11 + c)

To implicira da se bilo koji broj može izraziti kao zbroj njegovih znamenki plus višekratnik broja 9.
Dakle, ako uzmemo modulo s 9 na svakoj strani
abcd % 9 = (a + b + c + d) % 9 + 0

To znači da je ostatak kada se abcd podijeli s 9 jednak ostatku gdje je zbroj njegovih znamenki (a + b + c + d) podijeljen s 9.



Ako se sam zbroj znamenki sastoji od više od jedne znamenke, možemo dalje izraziti ovaj zbroj kao zbroj njegovih znamenki plus višekratnik od 9. Posljedično uzimanje modula 9 će eliminirati višekratnik od 9 sve dok zbroj znamenki ne postane jednoznamenkasti broj.

Kao rezultat toga, zbroj znamenki bilo kojeg broja bit će jednak modulu 9. Ako je rezultat modulo operacije nula, to znači da je jednoznamenkasti rezultat 9.
Za informacije o implementaciji koda Pogledajte Digitalni korijen (ponovljeni digitalni zbroj) zadanog velikog cijelog broja