我正在开展一个项目,但我被困住了。我尝试编写一段代码,检查给定的数字是否为偶数减去2(给定的数字不能超过6)。如果它甚至打印0,如果它是奇数,则打印1。
int count=input.nextInt()
int parity=0
while (count>0)
count=count-2;
if (count<0) {
parity=parity+1;
System.out.print(parity);
}
else if (count==0) {
System.out.println(parity);
}
^^这是我尝试翻译成MARIE语言的java代码,但没有任何作用。
我发布了我的MARIE代码,但我觉得它太混乱了:/
答案 0 :(得分:1)
您只需将低位检查为0 /非零。正常的体系结构有一条AND指令,可以简化,MARIE only has add/sub(比较大于或小于)。
但是,是的,您的循环将起作用,对数字let y:Employee = { name: x.name };
//OR
let { age, ...y } = x;
进行O(n)次迭代。如果你把它写成n
循环,比如
do{}while()
您可以在n = input;
do {
n-=2; // sub
}while(n>=0); // skipcond
// n==0 or -1 for even or odd
操作中使用O(log(n))
作为左移:add
与AC+AC
相同。这样做15次,将低位移到顶部,其他位移出。 (累加器,AC, is 16 bits wide)。
遗憾的是,这对MARIE来说真的很不方便,因为ADD only works with a memory source operand而不是AC << 1
。因此,您必须存储 AC,以便将其用作ADD的内存源操作数。
(当你知道你的输入在0..6 的范围内时,绝对不值得。在这种情况下,它只需要AC
循环最多3次迭代得到结果,相对于此总是15。但是对于无限制的输入,n-=2
版本可能需要32768次迭代!或者如果我们将此限制为正有符号整数则为16384; n-=2
版本不会甚至可以用于负整数)
例如:
n-=2
循环是有意义的,特别是如果你用2或其他东西展开它。如果AC只有8位,完全展开只需要7个STORE / ADD指令,但15个有点多。