Share

# Program for Sum of the digits of a given number in Golang

Home » Programming Language » Golang » Program for Sum of the digits of a given number in Golang

Welcome back, Problem solving is the most important part of a programmers life cause each and every day they work on solving issues so they need to be good in problem solving, So today we are going to Create a Program for Sum of the digits of a given number, We are going to implement this in Golang Programming Language if anyone wants the solutions in other languages as well please don’t hesitate to leave a comment, we are going trying to solve this problem via multiple approaches, approaches mentioned below:

1. Sum of the digits of a given number with input as string not using modular and divide
2. Sum of the digits of a given number using modular and divide
3. Sum of the digits of a given number using recursion
4. Sum of the digits of a given number using tail recursion

EXAMPLES

``````Input: n = 12345
Output: 15

Input: n = 1234
Output: 10``````

## 1. Given a number, find the sum of its digits.

When the number of digits of that number exceeds 1019 , we can’t take that number as an integer since the range of long long int doesn’t satisfy the given number. So take input as a string, run a loop from start to the length of the string and increase the sum with that character(in this case it is numeric)

Follow the below steps to solve the problem:

• Declare a variable sum equal to zero
• Run a loop from zero to the length of the input string
• Add the value of each character into the sum, by converting the character into it’s integer value
• Return sum

Below is the implementation of the above approach:

```package main

import (
"fmt"
_ "strconv"
)

// function to get the sum of digits
func doSum(n string) int {
// step one to get length of the digits of given number convert it to string
sum := 0
for i := range n {
// Since ascii value of
// numbers starts from 48
// so we subtract it from sum
sum += int(n[i]) - 48
}

// SECOND APPROACH IF FUNCTION INPUT IS INT
// nn := strconv.Itoa(n)
// for i := range nn {
// 	// Since ascii value of
// 	// numbers starts from 48
// 	// so we subtract it from sum
// 	sum = sum + int(nn[i]) - 48
// }

return sum
}

func main() {
n := "12345"
fmt.Println(doSum(n))
}

```

Output:

``````
15
``````

## 2. Sum of the digits of a given number using modular and divide:

Follow the below steps to solve the problem:

• Get the number
• Declare a variable to store the sum and set it to 0
• Repeat the next two steps till the number is not 0
• Get the rightmost digit of the number with help of the remainder ‘%’ operator by dividing it by 10 and adding it to the sum.
• Divide the number by 10 with help of ‘/’ operator to remove the rightmost digit.
• Print or return the sum

Below is the implementation of the above approach:

```
package main

import (
"fmt"
)

// function to get sum of digits
func doSum(n int) int {
sum := 0
for n != 0 {
sum += n % 10
n = int(n / 10)
}
return sum
}

func main() {
n := 12345
fmt.Println(doSum(n))
}

```

Output:

``````
15
``````

## 3. Sum of the digits of a given number using recursion

Follow the below steps to solve the problem:

• Get the number
• Get the remainder and pass the next remaining digits
• Get the rightmost digit of the number with help of the remainder ‘%’ operator by dividing it by 10 and adding it to the sum.
• Divide the number by 10 with help of the ‘/’ operator to remove the rightmost digit.
• Check the base case with n = 0
• Print or return the sum

Below is the implementation of the above approach:

```package main

import (
"fmt"
)

// function to get sum of digits
func doSum(n int) int {
if n == 0 {
return 0
}
return n%10 + doSum(n/10)
}

func main() {
n := 12345
fmt.Println(doSum(n))
}

```

Output:

``````
15
``````

## 4. Sum of the digits of a given number using tail recursion

Follow the below steps to solve the problem:

• Add another variable “Val” to the function and initialize it to ( Val = 0 )
• On every call to the function add the mod value (n%10) to the variable as “(n%10)+val” which is the last digit in n. Along with passing the variable n as n/10.
• So on the First call, it will have the last digit. As we are passing n/10 as n, It follows until n is reduced to a single digit.
• n<10 is the base case so When n < 10, then add the n to the variable as it is the last digit and return the val which will have the sum of digits

Below is the implementation of the above approach:

```package main

import (
"fmt"
)

// function to get sum of digits
func tailRecursion(n int, v int) int {
if n < 10 {
v += n
return v
}

return tailRecursion(int(n/10), (n%10)+v)
}

func main() {
n := 12345
fmt.Println(tailRecursion(n,0))
}

```

Output:

``````
15
``````

FULL CODE:

```package main

import (
"fmt"
)

// function to get the sum of digits
func simpleSum(n string) int {
sum := 0
for i := range n {
// Since ascii value of
// numbers starts from 48
// so we subtract it from sum
sum += int(n[i]) - 48
}
return sum
}

// function to get the sum of digits
func sumUsingModular(n int) int {
sum := 0
for n != 0 {
sum += n % 10
n = int(n / 10)
}
return sum
}

// function to get the sum of digits
func sumUsingRecursion(n int) int {
if n == 0 {
return 0
}
return n%10 + sumUsingRecursion(n/10)
}

// function to get sum of digits
func tailRecursion(n int, v int) int {
if n < 10 {
v += n
return v
}
return tailRecursion(int(n/10), (n%10)+v)
}

func main() {
n := 12345
sn := "12345"
simpleSum := simpleSum(sn)
sumUsingModular := sumUsingModular(n)
sumUsingRecursion := sumUsingRecursion(n)
tailSum := tailRecursion(n,0)
fmt.Printf("simple sum: %d\nmodular sum: %d\nrecursive sum: %d\ntail sum: %d\n",simpleSum, sumUsingModular, sumUsingRecursion,tailSum)
}

```

If you found code/algorithm incorrect or found better approach then please comment.

## Highlights

### In Python: How to Use the In Keyword

March 20, 2023 ### Encapsulation in Java (The Easy Way)

March 17, 2023 ### C program to display calendar for a given year

March 14, 2023 ### Top 5 Ways to Become Better at JavaScript

March 10, 2023 ### Journey of HTTP request and response: A Comprehensive Guide

March 1, 2023 ### Differences between sync.Map and map in Go

February 27, 2023 ### Build a To-Do App with Local Storage using Vanilla JavaScript

February 24, 2023 