关于真分数四则运算算法

排版有些问题,请谅解。。。

数据结构:下压栈
参考算法:Dijkstra双栈算数表达式求值算法、GCD算法(求最大公约数)、逆波兰表达式

1.Dijkstra双栈算数表达式求值算法:

引自《算法》第四版 作者: 塞奇威克 (Robert Sedgewick) / 韦恩 (Kevin Wayne)

本质:操作数栈 运算符栈 忽略左括号 遇右括号弹出运算符、弹出所需数量操作数、将运算结果压入操作数栈

2.GCD算法:

      别名:辗转相除法、欧几里得算法
      因为以前写过一个C语言实现,直接po上来吧
#include "stdafx.h"

int _GCD(int m, int n);

int main(void)
{
	int x, y;
	int GCD;
	int a, b;

	scanf_s("%d/%d", &x, &y);
	GCD = _GCD(x, y);

	a = x / GCD;
	b = y / GCD;

	printf("%d/%d", a, b);
	return 0;
}

int _GCD(int m, int n)
{
	int  d;

	for (;;) {
		if (n == 0) {
			break;
		}
		else {
			d = m%n;
			m = n;
			n = d;
		}
	}

	return m;
}

3.逆波兰表达式

表达式
逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子:
正常的表达式 逆波兰表达式
a+b ---> a,b,+
a+(b-c) ---> a,b,c,-,+

-- 引用自百度百科

4.实现思路

        (1)改双栈为三栈——运算符栈、分子栈、分母栈
        (2)双栈——运算符栈+字符串栈(存分数)
        (3)重载运算符号(override)——可能比较复杂,需要用到面向对象编程语言,java中一切都是对象,运算符号也是被封装的类,我觉得应该可行
        (4)面向过程编程——暂未想到简单有效的算法

(未完待续。。。)

posted @ 2017-09-12 22:55  winterist  阅读(410)  评论(3编辑  收藏  举报