アセンブリ言語で次のシーケンスを解決する方法:
R1=-2+4-6+8-10.....+-N
注:N値は入力として
パターンを見つけるために、これのいくつかの値を見てください。
N R1
2 -2
4 +2
6 -4
8 +4
10 -6
12 +6
だから、いつN%4 == 0
、そしてR1 = N/2
、そしていつN%4 == 2
、そしてR1 = -(N/2 + 1)
。
したがって、これを計算するには、次のようにします (疑似コードですが、アセンブリに簡単に変換できます)。
if N%2 is not 0 then error: invalid input
R1 = N/2
if N%4 == 0 then jump to done
R1 = R1 + 1
R1 = -R1
done:
It is an arithmetico geometric progression with a = -2, d = -2 , r = -1
an = (a + (n-1)*d)*(r^(n-1))
N = an = 2*n*((-1)^n)
n = absolute(N) / 2 -1
R1 = Sn
on solving you will get
R1 = ((-1)^n)*n - ( 1 + (-1)^(n-1) )/2 -2
eqn 1 と 2 を使用して R1 を取得できます。ここにCのサンプルがあります
#include<math.h>
int main() {
float nlast,n,r1;
nlast = 12;
n = abs(nlast) / 2;
r1 = pow(-1,n)*n - ( 1 + pow(-1,n-1) )/2;
return(r1);
}
このサイトを使用して、アセンブリ コードを取得できます。