回 帖 发 新 帖 刷新版面

主题:帮忙看看哪儿错了

从1开始统计不能被3或是5整除的数,并将他们累加,和大于300的时候,结束统计
clear
set talk off
s=0
n=1
do while .t.
     if s>300
        exit
     else
       if int(n/3)!=n/3 or int(n/5)!=n/5
         ??n
         ??","
         s=s+n
       endif
       n=n+1
     endif  
enddo 
?s
set talk on
return
初学者,请别见笑

回复列表 (共6个回复)

沙发

INT()函数会自动将返回值4舍5入的,比如INT(1/2)是等于1的,而不是0,你应该要用这样的条件来判定:
  IF (INT(N/3)*3)<>N .OR. (INT(N/5)*5<>N)
    ?N
    ??,
    S=S+N
  ENDI
  N=N+1

板凳

clear
set talk off
s=0
n=1
do while !s>300
       if MOD(n,3)=0 or MOD(n,5)=0
         ??n
         ??","
         s=s+n
       endif
       n=n+1
enddo 
?s
set talk on
return

3 楼

运行结果一样 还有就是取整函数应该是没有四舍五入的吧

4 楼

[quote]运行结果一样 还有就是取整函数应该是没有四舍五入的吧[/quote]

你试试INT(1/2)等于多少就知道有没有4舍5入了啊。

PS:现在结果是怎样的?

5 楼

呵呵,不要看到“或”就“or”啊!

“不能被3或是5整除”,并不是“不能被3整除 或是 不能被5整除”,而是“不能被3整除 并且 不能被5整除”。条件写为 int(n/3)!=n/3 AND int(n/5)!=n/5

没明白的话,俺换个说法,“不能被(3或是5)整除”,也就是“能被(3或是5)整除”取反。写为 
not (int(n/3)=n/3 or int(n/5)=n/5)

上述两个表达式等效。

6 楼


 i like fox ,i like you 你的回答总是一针见血,切入要害,我就是不明白这个地方,看您的回答,总是让人很爽,您是VF老师嘛?给您留了几次言,想跟您认识一下,可以嘛?谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册