これ順番に足していくと時間がかかるな・・・(絶望
これ順番に足していくと時間がかかるな・・・(絶望
> 面倒くさいから電子計算機に計算させよう
MOVEQ #99,D1
MOVEQ #0,D0
L1:
ADD.W D1,D0
DBRA D1,L1
これって何CPU?
パターンが分かった
面白い
1 1
2 3
3 6
4 10
5 15 A
6 21
7 28
8 36
9 45 B
10 55 C
奇数Bの場合はA⨯Bで偶数Cの場合はA⨯C+A
100⨯50+50=5050
>>3
多分 68k系。
DBRA ってレジスタ D1 から 1 を引いた後 D1 が 0 以外なら L1 にジャンプするって命令で合ってる?
すまんググったら自己解決した
D1 から 1 を引いた後 "-1 以外なら" L1 にジャンプか
確かに for (int i=99; i >=0; i--) みたいな逆向きループからコンパイルされた結果と考えるとその方が自然だな
https://arcb.csc.ncsu.edu/~mueller/codeopt/codeopt00/notes/constructs
MOVEQ Move Quick; Motorola 680x0, Motorola 68300;
moves byte (8 bits) of sign-extended data (32 bits) to a data register; sets or clears flags
MOVEQ 夏カシス!!!
数列にすれば、1,3,6,10,15,21,28...=1,3*1,3*2,5*2,5*3,7*3,7*4...
よってn番目は、偶数の場合、(n+1)*(n÷2)
奇数の場合、n*{(n+1)÷2}
よって99番目は、99*{(99+1)÷2}=99*50=4950