主题:帮忙看看哪儿错了
疏影风流
[专家分:0] 发布于 2010-04-08 01:36:00
从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
初学者,请别见笑
最后更新于:2010-04-08 08:15:00
回复列表 (共6个回复)
沙发
GEORGECHIN [专家分:440] 发布于 2010-04-08 09:34:00
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
板凳
qjbzjp [专家分:8830] 发布于 2010-04-08 09:46:00
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 楼
疏影风流 [专家分:0] 发布于 2010-04-08 09:48:00
运行结果一样 还有就是取整函数应该是没有四舍五入的吧
4 楼
GEORGECHIN [专家分:440] 发布于 2010-04-08 09:53:00
[quote]运行结果一样 还有就是取整函数应该是没有四舍五入的吧[/quote]
你试试INT(1/2)等于多少就知道有没有4舍5入了啊。
PS:现在结果是怎样的?
5 楼
Ilikefox [专家分:5770] 发布于 2010-04-08 11:32:00
呵呵,不要看到“或”就“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 楼
疏影风流 [专家分:0] 发布于 2010-04-08 12:07:00
i like fox ,i like you 你的回答总是一针见血,切入要害,我就是不明白这个地方,看您的回答,总是让人很爽,您是VF老师嘛?给您留了几次言,想跟您认识一下,可以嘛?谢谢
我来回复