Ceci est un exemple de programme qui convertit des formules mathématiques en notation polonaise inverse. Source de l'algorithme: http://www.gg.e-mansion.com/~kkatoh/program/novel2/novel208.html Source de la formule: http://www.wdic.org/w/SCI/%E9%80%86%E3%83%9D%E3%83%BC%E3%83%A9%E3%83%B3%E3%83%89%E8%A8%98%E6%B3%95
Je vous remercie
Il est simplement converti en notation polonaise basée sur la formule. Puisque l'algorithme n'est fait qu'en Java, je voudrais remercier la source de la citation.
Rpn.java
/**
*Citation de l'algorithme: http://www.gg.e-mansion.com/~kkatoh/program/novel2/novel208.html
*/
public class Rpn {
public static void main(String[] args) {
//Citation d'expression: http://www.wdic.org/w/SCI/%E9%80%86%E3%83%9D%E3%83%BC%E3%83%A9%E3%83%B3%E3%83%89%E8%A8%98%E6%B3%95
String formula = "a+b"; // ab+
// String formula = "a+(b*c)"; // abc*+
// String formula = "(a+b)*c"; // ab+c*
// String formula = "a*b+c*d+e*f"; // ab*cd*ef*++
// String formula = "((a+b)*(c+d)+e)*f"; // ab+cd+*e+f*
System.out.println(getRpn(formula));
}
/**
*Convertir la formule en notation polonaise inverse.
*
* @formule param Notation polonaise inverse Formule à convertir
* @return Formule convertie en notation polonaise inverse
*/
public static String getRpn(String formula) {
char[] sequenceList = formula.toCharArray();
//StringBuilder pour stocker la valeur de retour
StringBuilder resultBuilder = new StringBuilder(sequenceList.length);
Deque<Character> stack = new ArrayDeque<>();
//Continuez à boucler jusqu'à ce que toutes les formules soient converties en notation polonaise inverse
for(char token : sequenceList){
switch (token) {
case '+':
case '-':
//Si la priorité de l'opérateur empilé est inférieure, l'opérateur de pile est placé dans le tampon.
while (!stack.isEmpty()) {
char c = stack.getFirst();
if (c == '*' || c == '/') {
resultBuilder.append(stack.removeFirst());
} else {
break;
}
}
stack.addFirst(token);
break;
case '*':
case '/':
case '(':
stack.addFirst(token);
break;
case ')':
// 「(De ")Opérateurs jusqu'à "pour tamponner
List<Object> list = Arrays.asList(stack.toArray());
int index = list.indexOf('(');
Deque<Character> workStack = new ArrayDeque<>();
for (int i = 0; i <= index; i++) {
char c = stack.removeFirst();
if (c != '(') {
workStack.addFirst(c);
}
}
while (!workStack.isEmpty()) {
resultBuilder.append(workStack.removeFirst());
}
break;
default:
//Dans le cas d'une valeur numérique
resultBuilder.append(token);
break;
}
}
while (!stack.isEmpty()) {
resultBuilder.append(stack.removeFirst());
}
return resultBuilder.toString();
}
}
S'il vous plaît laissez-moi savoir s'il y a un bogue. S'il n'y a pas de bugs, veuillez l'utiliser (rires) Merci à Internet pour obtenir les informations que vous souhaitez savoir de la source.
Recommended Posts