【问题标题】:Factorial in OAMOAM 中的阶乘
【发布时间】:2010-10-19 01:46:49
【问题描述】:

我在这里有一些 OAM 代码,我查看了所有的指令,它们的行为方式,并且我已经全部重写为伪代码,但是我在定位时遇到了问题(所以我可以数数程序中有多少)循环。我觉得它应该盯着我的眼睛,我已经用 C/Java 等做了一千个阶乘程序。但我在这里看不到。

所以它需要用户输入 if == 0 它会中断完成 [brz] if > 0 break 跳过 [brp] neg 用于对 abs 值取反

跳过例程执行乘法和减法, 后跟更多条件,看是否需要再次调用或程序是否完成。

我基本上需要在这个程序中找到循环。就像我说的那样,它可能正盯着我看,但对于分配者来说,这是一个松散的问题..

编辑澄清: 该程序不采用一个数字的阶乘,而是将输入的每个数字的阶乘相乘。

所以我可以输入 3、-4、2、0,结果将是 288。 (3*2*1)(4*3*2*1)(2*1)

为 BRI 编辑:

read: noop
      lda stdin
      brp return
      neg

return: bri read

【问题讨论】:

  • 在这种情况下BRI 似乎不是跳转操作码,因为read 仅用作存储。将代码贴在return:之后。

标签: assembly factorial oam


【解决方案1】:

嗯,这不仅仅是一个阶乘.. 这将是 C 版本:

    int result = 1, value;
    while(value = get_int()) {
next_loop:
        value = abs(c);
        do {
skip_loop:
            result *= value;
            value--;
        } while (value > 0);
    };
    printf("%d\n", result);

所以它是阶乘的乘积,正好有两个循环。

【讨论】:

  • @John 你有上下文吗?发表它。如果没有 BRNZ 操作码,则可能意味着 BRanch Inequal
猜你喜欢
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
相关资源
最近更新 更多