2012-11-01 3 views
4

덧셈, 뺄셈 및 비교 만 사용하여 자바에서 두 숫자의 곱셈을 재귀 적으로 찾고 싶습니다. 그래서, 나는 봤는데 나는 질문 요구 사항을 충족 Egyptian Algorithm을 발견.이집트 알고리즘 구현하기

그러나 base case에 도달 한 후에 곱셈 결과를 찾는 방법을 모르겠습니다.

예 :

13 x 30 

1 -- 30 

2 -- 60 

4 -- 120 

8 -- 240 //we stop here because the double of 8 is larger than 13 

우리는 그들이 어떤 30+120+240 = 390을있는 우리가 right column로부터 반대 번호를 추가 반면 그들이 1+4+8 있습니다 (13)과 동일 left column에서와에 번호를 추가 한 결과를 찾으려면 결과.

하지만 이제 프로그래밍 방식으로 마지막 부분을 수행하는 방법은 무엇입니까? 추가 할 숫자를 확인하는 방법은 무엇입니까? 너희들이 내 말을 듣기를 바란다. 힌트는 필요합니다.

+2

직접 해 보았습니까? 코드 스 니펫이 있습니까? –

+0

나는 실제로 문제의 마지막 부분에 대해 묻고있다. 전체 알고리즘을 코딩하는 방법이 아닙니다. 내 코드를 1 분 안에 게시 할 것입니다. – Sobiaholic

+0

확인 - 문제의 마지막 부분에 대해 어떤 시도를 했습니까? –

답변

0

좋아, 나는 Brute Force Algorithm을 사용했다. 그것은 BigO- (n)입니다. 나는 그것을 구현하는보다 효율적인 방법이있을 것이라고 확신한다. 지금은. 나는 이것으로 정착하고있다.

고마워요!

0

때마다, (당신의 multiplicant에 동일한 시작) 당신의 multiplicant 나머지는 왼쪽 열의 수보다 큰 경우에서 왼쪽 열을 빼기 역순으로 생성 된 결과 을 통해 루프를 수행 승수를 곱하고 결과에 오른쪽 열을 추가합니다 (0부터 시작).

+0

지금 당신의 힌트를 따르고 있습니다. – Sobiaholic

0

이 위키 백과를 발견했을 수 있습니다. article.

"분해"섹션의 마지막 부분을 살펴보십시오. 구현해야하는 하위 알고리즘을 찾을 수 있습니다.

+0

분해를 구현하는 유일한 방법은 'for 루프'입니다. 그러나 나는 그것이 매우 느리고 비용이 너무 많이들 것이라고 생각한다. 'for 루프 '와 재귀 호출의 여러. 그리고 나는 그것이 나에게 마지막 결과를 찾기 위해'힘 '을 찾는 것을 도울 수있는 방법을 아직도 모른다. 나는 내일을 계속할 것이다. – Sobiaholic

1

여기서 문제를 해결하기 위해 의사의 대신이 끝날 때까지 기다리는 기본적

function egyptian(left, right) 
    prod := 0 
    while (left > 0) 
    if (left is odd) 
     prod := prod + right 
    left := halve(left) 
    right := double(right) 
    return prod 

을는 그것이 생성 될 때 주형의 각 행을 선택하고 그 출력에 속하는 경우 합계 쉽다. 나는이 알고리즘을 my blog에서 논의한다.

+0

하프 함수에 대한 의사 코드를 제공 할 수도 있습니까? 사용 가능한 작업 만 사용하여이 작업을 수행하는 방법을 파악하는 데 문제가 있습니다. – Jasper

+0

또한, 'is odd'는 주어진 연산을 사용하여 문제가된다. – Jasper

+0

고대 이집트인들은 자갈 한 켤레를 사용했습니다. 당신도 똑같이 할 수 있습니다. 숫자를 반으로 줄이려면 하나를 가지고 던져 버리고 하나를 가져가 버리고 하나를 버리고 하나를 버리십시오. 네가 간 자갈은 원래 수의 반이다. 숫자가 이상한 지 알아내는 것은 비슷합니다 : 아무도 또는 하나의 조약돌이 남을 때까지 하나를 가지고 하나를 던져 버리십시오. 이는 숫자가 짝수 또는 홀수인지를 알려줍니다. – user448810