求用abap在(100,1000)之间所有能被3整除的偶数的和

如题:
代码如下

 report  zjiang1                                                     .
data : sum type i,
max type i value 100.
while   max <= 1000.
max = max + 1.
  data itmp type i.
  itmp = sy-index * 3.
  itmp = sy-index mod 2.
  if itmp <> 0.
    continue.
  endif.
  sum = sum + sy-index.
endwhile.
write: 'sum=', sum.

逻辑有点混乱,求大神指点。

建议直接从102开始,然后每次+3,效率比较高

 report  zjiang1                                                     .
data : sum type i,
max type i value 99.    //建议直接用99开始,然后+3,效率高不少

while max <= 1000.
    max = max + 3.
    data itmp type i.
    itmp = sy-index * 3.
    itmp = sy-index mod 2.
    if itmp <> 0.
        continue.
    endif.
    sum = sum + sy-index.
endwhile.

write: 'sum=', sum.

report zjiang1 .
data : sum type i,
max type i value 100.
while max <= 1000.
max = max + 2.
data itmp type i.
itmp = sy-index * 3.
if itmp <> 0.
continue.
endif.
sum = sum + sy-index.
endwhile.
write: 'sum=', sum.

1、首先被3整除的数很有特点,即各个位数加起来能被3整除,则这个就就能被3整除(如,123,1+2+3=6,可以被3整除,即123可以被3整除),
所以在(100,1000)之间所有能被3整除的数即为以102位首位,999为尾位的等差数列,公差d=3
2、要求是偶数,则在1的基础上d=3*2即可,所以题目就变成未以102位首位,996为尾位的等差数列,公差d=6的数列
3、等差数列公式,直接就出结果了。
扩展:类似的题目找出首位、尾位然后公差。套用等差数列公式就出来了

1、首先被3整除的数很有特点,即各个位数加起来能被3整除,则这个就就能被3整除(如,123,1+2+3=6,可以被3整除,即123可以被3整除),
所以在(100,1000)之间所有能被3整除的数即为以102位首位,999为尾位的等差数列,公差d=3
2、要求是偶数,则在1的基础上d=32即可,所以题目就变成未以102位首位,996为尾位的等差数列,公差d=6的数列
3、等差数列公式,直接就出结果了。
扩展:类似的题目找出首位、尾位然后公差。套用等差数列公式就出来了
Sn=n*(a1+an)*d/2
其中n=(an-a1)/d+1=(996-102)/6+1=150

直接套用公式Sn=150(102+996)/6
2 = 82350
其中黑色标注的字体就说程序里的代码公式