【问题标题】:Can I prevent GNU bc from spewing out zeros?我可以防止 GNU bc 吐出零吗?
【发布时间】:2017-06-10 18:22:51
【问题描述】:

假设我想使用 GNU bc 求解方程 x + 3 = 40。我可以做到这一点的一种方法是首先检查 0 是否是一个解决方案,然后检查 1,依此类推,直到我得到正确的答案。 (显然不是做代数的最好方法,但是很好。)所以我在 GNU bc 中输入了以下代码:

int solver(int x);
define solver(x){
if(x + 3 == 40) return x;
x = x + 1;
solver(x)
}
solver(0)

它产生 37——当然是正确的答案——但是 37 后面跟着 37 个零。根据一些实验,似乎每个零都来自 if 语句为假的一个实例,但是如何防止零出现?我正在使用 GNU bc 来解决更复杂的函数并创建更复杂的数字列表,因此对所有零进行排序对我来说确实不切实际。任何帮助将不胜感激,因为我还没有弄清楚任何事情。

【问题讨论】:

    标签: bc


    【解决方案1】:

    对于每个不是赋值的操作,bc 打印一个退出状态。抑制这种情况的一种方法是分配给虚拟值.(无论如何这只是最后一个结果的值),另一种方法是确保您明确打印出您需要的内容。

    我会这样写你的函数:

    #!/usr/bin/bc -q
    
    define solver(x) {
        if (x + 3 == 40) return x
        return solver(x+1)
    }
    print solver(0), "\n"
    
    quit
    

    对您的尝试的几点说明:

    • 我不明白你的第一行应该做什么,我只是放弃了它
    • 我已经缩进了代码,添加了一些空格并删除了分号——主要是为了品味和可读性
    • 我已经简化了递归调用以避免solver(x) 行独立,因为这会产生虚假的0

    至于您怀疑if 语句会产生零:请在交互式会话中尝试以下操作:

    1 == 2                      # Equality test on its own produces output
    0
    1 == 1                      # ... for both true and false statements
    1
    if (1 == 2) print "yes\n"   # No output from false if condition
    if (1 == 1) print "yes\n"   # If statement is true, print string
    yes
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 2013-02-07
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 2019-09-27
      相关资源
      最近更新 更多