zoukankan      html  css  js  c++  java
  • 关于真分数四则运算算法

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

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

    (未完待续。。。)

  • 相关阅读:
    CAF(C++ Actor Framework)介绍
    Android C++打印函数调用栈
    80%应聘者都不及格的JS面试题
    二叉树的最近公共祖先--递归解法
    mysql的InnoDB引擎的行记录格式ROW_FORMAT
    Docker安装mysql 集群(pxc方式)及负载均衡实践
    主机ping不通虚拟机,虚拟机可以ping通主机解决方式
    springboot源码解析
    springmvc源码解析
    寻找两个正序数组的中位数
  • 原文地址:https://www.cnblogs.com/winterist/p/7512691.html
Copyright © 2011-2022 走看看