How to Find the Last Fibonacci Digit in Golang

The challenge

Return the last digit of the nth element in the Fibonacci sequence (starting with 1,1, to be extra clear, not with 0,1 or other numbers).

LastFibDigit(1) == 1 LastFibDigit(2) == 1 LastFibDigit(3) == 2 LastFibDigit(1000) == 5 LastFibDigit(1000000) == 5

The solution in Golang

Option 1:

package solution func LastFibDigit(n int) int { n %= 60 a, b := 0, 1 for i := 0; i<n; i++ { a, b = b, a+b } return a % 10 }
Code language: Go (go)

Option 2:

package solution func LastFibDigit(n int) int { fib := []int{0, 1} for i := 1; i < 60; i++ { fib = append(fib, (fib[i]+fib[i-1])%10) } j := n % 60 return fib[j] }
Code language: Go (go)

Option 3:

package solution import "math" func LastFibDigit(n int) int { return int(math.Pow(math.Phi, float64(n%60))/math.Sqrt(5) + 0.5) % 10 }
Code language: Go (go)

Test cases to validate our solution

package solution_test import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Sample test cases", func() { It("Basic tests", func() { Expect(LastFibDigit(1)).To(Equal(1)) Expect(LastFibDigit(21)).To(Equal(6)) Expect(LastFibDigit(302)).To(Equal(1)) Expect(LastFibDigit(4003)).To(Equal(7)) Expect(LastFibDigit(50004)).To(Equal(8)) Expect(LastFibDigit(600005)).To(Equal(5)) Expect(LastFibDigit(7000006)).To(Equal(3)) Expect(LastFibDigit(80000007)).To(Equal(8)) Expect(LastFibDigit(900000008)).To(Equal(1)) Expect(LastFibDigit(1000000009)).To(Equal(9)) }) })
Code language: Go (go)
Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments