Finne summen av sifre i et tall til sum blir enkeltsifret
Gitt et heltall n må vi gjentatte ganger finne summen av sifrene til resultatet blir et ensifret tall.
Eksempler:
Inndata: n = 1234
Produksjon: 1
Forklaring:
Trinn 1: 1 + 2 + 3 + 4 = 10
Trinn 2: 1 + 0 = 1Inndata: n = 5674
Produksjon: 4
Forklaring:
Trinn 1: 5 + 6 + 7 + 4 = 22
Trinn 2: 2 + 2 = 4
Innholdsfortegnelse
- [Naiv tilnærming] Ved å legge til sifre gjentatte ganger
- [Forventet tilnærming] Bruke matematisk formel
[Naiv tilnærming] Ved å legge til sifre gjentatte ganger
Tilnærmingen er fokusert på å beregne det digitale rommet t av et tall som er resultatet av summering av sifrene gjentatte ganger til en enkeltsifret verdi oppnås. Slik fungerer det konseptuelt:
- Sum sifrene : Start med å legge til alle sifrene i det gitte nummeret.
- Sjekk resultatet : Hvis summen er et ensifret tall (dvs. mindre enn 10), stopp og returner den.
- Gjenta prosessen : Hvis summen fortsatt er mer enn et enkelt siffer, gjenta prosessen med summen av sifre. Dette fortsetter til en ensifret sum er nådd.
// 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 ));
Produksjon
1
Tidskompleksitet: O(log 10 n) mens vi itererer over sifrene i tallet.
Hjelpeplass: O(1)
[Forventet tilnærming] Bruke matematisk formel
Vi vet at hvert tall i desimalsystemet kan uttrykkes som summen av sifrene multiplisert med potenser av 10. For eksempel et tall representert som abcd kan skrives som følger:
abcd = a*10^3 + b*10^2 + c*10^1 + d*10^0
Vi kan skille sifrene og omskrive dette som:
abcd = a + b + c + d + (a*999 + b*99 + c*9)
abcd = a + b + c + d + 9*(a*111 + b*11 + c)
Dette innebærer at et hvilket som helst tall kan uttrykkes som summen av sifrene pluss et multiplum av 9.
Så hvis vi tar modulo med 9 på hver side
abcd % 9 = (a + b + c + d) % 9 + 0Dette betyr at resten når abcd deles på 9 er lik resten der summen av sifrene (a + b + c + d) er delt på 9.
Hvis summen av sifrene i seg selv består av mer enn ett siffer, kan vi videre uttrykke denne summen som summen av sifrene pluss et multiplum av 9. Følgelig vil å ta modulo 9 eliminere multiplumet av 9 inntil summen av sifrene blir ettsifret tall.
Som et resultat vil summen av sifrene til et hvilket som helst tall være lik modulo 9. Hvis resultatet av modulo-operasjonen er null, indikerer det at det ensifrede resultatet er 9.
For å vite om kodeimplementering Se Digital rot (gjentatt digital sum) av det gitte store heltall