V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Ansen
V2EX  ›  Linux

求助~最大公约数脚本,大小随意赋值给变量的问题

  •  
  •   Ansen · 2015-01-07 15:32:47 +08:00 · 2250 次点击
    这是一个创建于 3608 天前的主题,其中的信息可能已经有所发展或是发生改变。
    advnced bash中的一个例子提到
    
    我的推导过程
    dividend=10
    divisor=20
    until里面的运算步骤为
    remainder=$dividend % $divisor=10 % 20 =0
    dividend=$divisor=20
    remainder等于0了,循环结束,那么结果为$dividend=20?
    明显不对呀?

    附上脚本源码
    #!/bin/bash

    ARGS=2
    E_BADARGS=65

    if [ $# -ne "$ARGS" ]
    then
    echo "Usage: `basename $0` first-number second-number"
    exit $E_BADARGS
    fi

    gcd ()
    {
    dividend=$1
    divisor=$2

    remainder=1

    until [ "$remainder" -eq 0 ]
    do
    let "remainder = $dividend % $divisor"
    dividend=$divisor
    divisor=$remainder
    done
    }

    gcd $1 $2

    echo; echo "GCD of $1 and $2 = $dividend"; echo

    exit 0
    4 条回复    2015-01-08 18:14:02 +08:00
    Ansen
        1
    Ansen  
    OP
       2015-01-07 15:38:39 +08:00
    貌似找着问题了……
    remainder=$dividend % $divisor=10 % 20 =0 这计算错误了。。囧
    vinceguo
        2
    vinceguo  
       2015-01-08 16:29:16 +08:00   ❤️ 1
    ABS...
    我当初在平板上看那本书的时候感觉实在是蛋疼。
    那语法实在是太丑了,还乱得很。可能有历史的原因,也可能需要考虑到对各种东西的兼容。
    Anyway,前段时间发现Bash那个漏洞的是Stéphane Chazelas发现的,你在书里面应该看到这名字很多次了吧,里面不少代码是他贡献的。
    我学bash后唯一的应用就是实现了一个经典的处理算术表达式的算法:先把算术表达式变成逆波兰表示,然后再计算,最漂亮的是这两步都只用了一个非常基础的数据结构:栈。后来才知道是鼎鼎大名的Dijkstra提出来的shutting yard算法。如果你想看代码的话: http://www.vinceguo.me/blogs/calculator/calc.sh.tar.gz

    好吧,说了这一堆不相关的废话。
    Ansen
        3
    Ansen  
    OP
       2015-01-08 18:05:10 +08:00   ❤️ 1
    @vinceguo 感谢分享,以我现在的水平,够我研究一段时间了
    vinceguo
        4
    vinceguo  
       2015-01-08 18:14:02 +08:00   ❤️ 1
    @Ansen 研究个毛线。你有兴趣的话直接找算法去实现还好一些。我最烦的就是看别人的代码。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2331 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 01:51 · PVG 09:51 · LAX 17:51 · JFK 20:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.