A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91
99.
Find the largest palindrome made from the product of two 3-digit numbers.
Find the largest palindrome made from the product of two 3-digit numbers.
My solution;
Sub Palindrome()
Dim Num, a, b, MaxPal
Dim StrNum As String
MaxPal = 0 '회문 최대값 저장 변수
For a = 100 To 999
For b = 100 To 999
Num = a * b
StrNum = CStr(Num)
If StrComp(StrNum, StrReverse(StrNum), 1) = 0 Then
If Num > MaxPal Then
MaxPal = Num
End If
End If
Next
Next
MsgBox MaxPal
End Sub
실행시간(초): 0.703125 Dim Num, a, b, MaxPal
Dim StrNum As String
MaxPal = 0 '회문 최대값 저장 변수
For a = 100 To 999
For b = 100 To 999
Num = a * b
StrNum = CStr(Num)
If StrComp(StrNum, StrReverse(StrNum), 1) = 0 Then
If Num > MaxPal Then
MaxPal = Num
End If
End If
Next
Next
MsgBox MaxPal
End Sub
위 방식은 엑셀 VBA에 내장된 문자열 함수 CStr, StrComp, StrReverse 함수를 이용한 것이다.
세자리 숫자를 서로 곱한 결과를 문자열로 변환하고, 이를 역치환시켜 서로 비교하게 함으로써 회문(Palindrome)인지 확인했다.
실행시간은 약 0.7초 걸렸다. 만일 StrComp를 사용하지 않고, 직접 If StrNum = StrReverse(StrNum) Then 으로 하면 약 0.1초 정도 실행시간이 줄어든다.
다음 방식은 문자열 함수를 사용하지 않고, 직접 reverse 함수를 만들어 실행해 본 것이다. 실행속도는 오히려 약 2.5초 정도 더 늘어났다.
My solution 2;
Sub Palindrome2()
Dim Num, a, b, MaxPal
MaxPal = 0 '회문 최대값 저장 변수
For a = 100 To 999
For b = 100 To 999
Num = a * b
If Num = ReverseNum(Num) Then
If Num > MaxPal Then
MaxPal = Num
End If
End If
Next
Next
MsgBox MaxPal
End Sub
'숫자를 Reverse 시키는 함수
Function ReverseNum(ByVal n)
Dim Reversed
Reversed = 0
Do While n > 0
Reversed = (Reversed * 10) + (n Mod 10)
n = Int(n / 10) ' int를 안하면 정확한 결과가 나오지 않음(중요)
Loop
ReverseNum = Reversed
End Function
실행시간(초): 3.28125
Dim Num, a, b, MaxPal
MaxPal = 0 '회문 최대값 저장 변수
For a = 100 To 999
For b = 100 To 999
Num = a * b
If Num = ReverseNum(Num) Then
If Num > MaxPal Then
MaxPal = Num
End If
End If
Next
Next
MsgBox MaxPal
End Sub
'숫자를 Reverse 시키는 함수
Function ReverseNum(ByVal n)
Dim Reversed
Reversed = 0
Do While n > 0
Reversed = (Reversed * 10) + (n Mod 10)
n = Int(n / 10) ' int를 안하면 정확한 결과가 나오지 않음(중요)
Loop
ReverseNum = Reversed
End Function
댓글 없음:
댓글 쓰기