From 1d954c8d7719e0fc6e2af87f03cc34d0f94b8cdd Mon Sep 17 00:00:00 2001 From: VicRen Date: Fri, 30 Oct 2020 12:28:47 +0800 Subject: [PATCH] 30: digit fifth powers --- 30_digit_fifth_powers/main.go | 32 ++++++++++++ 30_digit_fifth_powers/main_test.go | 78 ++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 30_digit_fifth_powers/main.go create mode 100644 30_digit_fifth_powers/main_test.go diff --git a/30_digit_fifth_powers/main.go b/30_digit_fifth_powers/main.go new file mode 100644 index 0000000..77f06f8 --- /dev/null +++ b/30_digit_fifth_powers/main.go @@ -0,0 +1,32 @@ +package main + +import "fmt" + +func main() { + sum := 0 + for i := 2; i < 355000; i++ { + if sumOfFifthPowerOfDigits(i) == int64(i) { + sum += i + } + } + fmt.Println(sum) +} + +func sumOfFifthPowerOfDigits(n int) int64 { + number := n + sum := int64(0) + for number > 0 { + x := number % 10 + sum += fifthPower(x) + number /= 10 + } + return sum +} + +func fifthPower(n int) int64 { + p := int64(1) + for i := 0; i < 5; i++ { + p *= int64(n) + } + return p +} diff --git a/30_digit_fifth_powers/main_test.go b/30_digit_fifth_powers/main_test.go new file mode 100644 index 0000000..5c6a731 --- /dev/null +++ b/30_digit_fifth_powers/main_test.go @@ -0,0 +1,78 @@ +package main + +import ( + "testing" +) + +func Test_fifthPower(t *testing.T) { + type args struct { + n int + } + tests := []struct { + name string + args args + want int64 + }{ + { + "1", + args{1}, + 1, + }, + { + "2", + args{2}, + 32, + }, + { + "9", + args{9}, + 59049, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := fifthPower(tt.args.n); got != tt.want { + t.Errorf("fifthPower() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_sumOfFifthPowerOfDigits(t *testing.T) { + type args struct { + n int + } + tests := []struct { + name string + args args + want int64 + }{ + { + "1", + args{1}, + 1, + }, + { + "11", + args{11}, + 2, + }, + { + "111", + args{111}, + 3, + }, + { + "222", + args{222}, + 96, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := sumOfFifthPowerOfDigits(tt.args.n); got != tt.want { + t.Errorf("sumOfFifthPowerOfDigits() = %v, want %v", got, tt.want) + } + }) + } +}