关于真分数四则运算算法

99封情书 提交于 2020-01-27 07:54:45

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

数据结构:下压栈
参考算法: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)面向过程编程——暂未想到简单有效的算法

(未完待续。。。)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!