2017-04-05 1 views
-3

수학 표현식이 여러 개의 divisions/in과 함께 주어져 있다고 가정합니다. 예를 들어문자열로 된 구분자 Java

:

(x+2)/(1+ 1/(x-2)) 

내가 어떻게 발현 출력 모든 제수? 위의 예를 들어 출력이 될 것이다 :

1+1/(x-2) 
x-2 

1+1/(x-2)하여 부문, 그리고 그 차례로 x-2에 의해 부서가 포함되어 있기 때문에.

저는 첫 번째 나누기 만 가져옵니다. 즉, 첫 번째 나누기 뒤의 전체 exprssion입니다. 모든 약수는 어떻게 구합니까?

편집 : 그가 요구하는 것은 표현의 모든 약수를 얻는 것입니다.

+0

지금까지 해보신 것은 무엇입니까? –

+0

'모든 칸막이가있을 줄 '을 뽑을 수 있습니까? –

+0

질문을 좀 더 명확하게 편집 할 수 있습니까 – Hema

답변

1

나누기는 a/b 형식의 표현입니다. 여기서 a와 b는 그 자체로 숫자, 변수 또는 표현식이 될 수 있습니다. a은 "배당금"이고, b은 "약수"입니다. 표현식에 모든 제수를 출력하려고합니다.

이 키는 표현식이 실제로 이진 트리 구조임을 인식하는 것입니다. 트리의 노드는 두 개의 하위 표현식을 결합하는 기호입니다. 나뭇잎 (자손이없는 노드)은 변수 또는 숫자입니다. 여기에 귀하의 표현에 대한 예는 다음과 같습니다

expression tree

상단 작업은 지난 일어나는 부문이다. 왼쪽에는 x + 2이 있는데, 두 개의 리프 노드 (x 및 2)와 + 조작이 결합되어 있습니다. 오른쪽에는 하위 표현식 (1 + 1/(x - 2))이 있습니다. 마지막 부분은 까다 롭습니다. 왼쪽에서 오른쪽으로 연산자를 보면, (1 + 1)/(x - 2)로 오해 할 수 있습니다. 그러나 연산자 우선 순위를 고려해야하기 때문에 실제로 1 + (1/(x - 2))입니다.

그런 다음해야 할 일은 괄호와 연산자 우선 순위를 고려하여 메모리에 트리를 만드는 파서를 만드는 것입니다. 모든 약수를 원한다면 트리의 모든 노드를 통과 할 수 있으며 분할 노드라면 오른쪽 자식의 표현을 요청할 수 있습니다. 괄호를 다시 채워 넣거나 파싱하는 동안 문자열의 일부를 캐싱하고 해당 부분을 노드에 연결할 수 있습니다.

이것은 기성 코드를 제공하는 답변이 아니지만 주석에 명시된 바와 같이 스택 오버플로가 아닙니다. 매우 구체적인 질문이있는 경우 코드를 제공 할 수 있지만 이와 같은 더 큰 문제는 "방법"을 설명하고 실제 구현을 그대로 남겨 두는 것이 더 바람직합니다. 어쨌든 그것은 당신의 직업, 숙제 또는 취미이기 때문입니다.