Scroll Top

Euler no.4 : Largest palindrome product

euler_portrait

Largest palindrome product

세자리 수를 곱해 만들 수 있는 가장 큰 대칭수

결국 abccba 형식을 갖고 있으며 이를 식으로 표현한다면 다음과 같다.
abccba = a * 100000 + b * 10000 + c * 1000 + c * 100 + b * 10 + c * 1
abccba = a * 100001 + b * 10010 + c* 1100
abccba = 11 * (a * 9091 + b * 910 + c * 100)

세 자리 수 곱셈의 대칭수는 100*100 부터 999*999 사이의 값이다.
즉 결과값은 10000 ~ 998001 사이에 있다.

 

라고 열심히 생각을 했으나 구현하기가 막막해 우선은 모든 수 대입으로 구현함.

package main
import (
        "fmt"
        "time"
)

func main() {
        start := time.Now()
        var max, max0, max1, max2 int
        var array [6]int
        for a:=999; a>100; a-- { // 3자리수 이상이기에
                        for b:=999; b>a; b-- { // a*b 랑 b*a 랑 같기에 숫자가 역전될 경우를 방지
                                c := a * b
                        if c%11 == 0 {
                                max0 = c
                                for i:=0; i<=5; i++ { // 하나씩 숫자를 배열에 입력
                                        array[i] = c%10
                                        c = c/10
                                        }
                                if array[0] == array[5] && array[1] == array[4] && array[2] == array[3] {
                                        //fmt.Println(array, a, b, c) // 모든 대칭수 출력
                                        if max < max0 { // 최대값 저장해두기
                                                max = max0
                                                max1 = a
                                                max2 = b
                                        }
                                }
                        }
                }
        }
        fmt.Println("최대값은 : ", max1, " * ", max2, " = ", max)
        fmt.Println("계산 시간 : ", time.Since(start))
}

 

┌──(daleji㉿DESKTOP)-[~]
└─$ go run euler4.go
최대값은 :  913  *  993  =  906609
계산 시간 :  652.6µs

Related Posts

Leave a comment

You must be logged in to post a comment.