用 PL 写 2^x
Writing 2^x in PL
我们设计了一个具有以下语法的 PL:
load variableName, value
inc variableName //increases the value by 1
loop variableName //loops it a certain number of times depending
on variableName's value at the time. Also if
variableName's value is somehow altered later
on in the code, the loop cycle runs the same
amount as variableName's default value.
end //we put this to as a corresponding end to our loop.
例如,这是计算 x+x 的简单代码:
VM vm6 = new VM();
vm6.add("load x, 7");
vm6.add("load answer, 0");
vm6.add("loop x");
vm6.add("inc answer");
vm6.add("inc answer");
vm6.add("end");
现在我想弄清楚如何写 2^x 但我坚持了最长的时间。有人可以帮助我吗?
编辑:我真的想通了。我使用了自己的嵌套循环解决方案。
看起来很简单,不是吗?要计算 X^Y,循环 Y 次,每次将答案乘以 X。答案从 1 开始(任何零次幂都是 1)。
load x, 2
load answer, 1
loop [power]
[multiply procedure]
end
上面提到的[multiply procedure]
就是乘法的加法。两个数相乘 (x * y
) 等于长度为 x
和 y
的两个循环之间的交点数。所以为了您的目的,乘法 x * y
看起来像这样:
load x, [x value]
load y, [y value]
load answer, 0
loop x
loop y
inc answer
end
end
所以你的整个 2^x 过程只是一系列循环:
load x, [power]
load base, 2
load answer, 1
loop x
load addition, 0 //reset the multiplier
loop answer
loop base
inc addition
end
end
load answer, addition // load answer with multiplied value
end
当然,如果你不能做嵌套循环,那你就很倒霉了。
我们设计了一个具有以下语法的 PL:
load variableName, value
inc variableName //increases the value by 1
loop variableName //loops it a certain number of times depending
on variableName's value at the time. Also if
variableName's value is somehow altered later
on in the code, the loop cycle runs the same
amount as variableName's default value.
end //we put this to as a corresponding end to our loop.
例如,这是计算 x+x 的简单代码:
VM vm6 = new VM();
vm6.add("load x, 7");
vm6.add("load answer, 0");
vm6.add("loop x");
vm6.add("inc answer");
vm6.add("inc answer");
vm6.add("end");
现在我想弄清楚如何写 2^x 但我坚持了最长的时间。有人可以帮助我吗?
编辑:我真的想通了。我使用了自己的嵌套循环解决方案。
看起来很简单,不是吗?要计算 X^Y,循环 Y 次,每次将答案乘以 X。答案从 1 开始(任何零次幂都是 1)。
load x, 2
load answer, 1
loop [power]
[multiply procedure]
end
上面提到的[multiply procedure]
就是乘法的加法。两个数相乘 (x * y
) 等于长度为 x
和 y
的两个循环之间的交点数。所以为了您的目的,乘法 x * y
看起来像这样:
load x, [x value]
load y, [y value]
load answer, 0
loop x
loop y
inc answer
end
end
所以你的整个 2^x 过程只是一系列循环:
load x, [power]
load base, 2
load answer, 1
loop x
load addition, 0 //reset the multiplier
loop answer
loop base
inc addition
end
end
load answer, addition // load answer with multiplied value
end
当然,如果你不能做嵌套循环,那你就很倒霉了。