Назначение BODMAS - PullRequest
       9

Назначение BODMAS

0 голосов
/ 25 декабря 2009

Я работаю над проблемой, которая выглядит следующим образом -

Реализация функции, которая оценивает выражение, состоящее из следующие операнды: '(', ')', '+', '-', '*', '/'. Каждое число в Выражение может быть большим (таким, как представлено строкой 1000 цифр). Операнд '/' (т.е. деление) возвращает целое число фактор.

Контрольные примеры идут как -

(((10000000000000000000000001231234448563465435434723854278423 / 1111111111234623874627) * 2342384523 + 123124 - 34534534) * ( 1231263123242346 + 223423234346 * 234236536))

и может быть даже дольше.

Я не хочу использовать внешние библиотеки, которые являются оценщиками / синтаксическими анализаторами выражений, такими как JEP и тому подобное.

Я размышлял по аналогии с BigInteger, а потом узнал, что BigInteger не оценивает эспрессии, как это делает Integers. Я также знаю, что синтаксический анализ - это вариант, при котором мне нужно было бы имитировать поведение BODMAS. Я хотел бы знать, есть ли какой-либо другой способ сделать это, и если нет, хотел бы получить несколько указателей о том, как я мог бы реализовать это .

Я не ищу готовое решение, я просто ищу направления, чтобы прийти к решению самостоятельно.

Ответы [ 2 ]

1 голос
/ 25 декабря 2009

Вы можете создать парсер рекурсивного спуска для оценки выражения и использовать StringTokenizer в качестве лексера spimple для разделения строки. Вы можете использовать delim = "()/*-+" и returnDelims = true. Это вернет числа и разделители, которые в вашем случае - это операторы и скобки, которые вам нужно оценить.

0 голосов
/ 25 декабря 2009

Вы можете реализовать это как конечный автомат , а затем реализовать его, используя шаблон состояния . К сожалению, я не могу найти никаких примеров конечного автомата BODMAS, но они должны быть где-то там.

...