首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

简单数学题,小弟我循环时出错,给个代码参考下

2012-03-28 
简单数学题,我循环时出错,给个代码参考下列举出10到1000中所有能被3整除的最后一位带4的数//这里都会然后

简单数学题,我循环时出错,给个代码参考下
列举出10到1000中所有能被3整除的
最后一位带4的数     //这里都会
然后所有的数字累乘//这里输出到label总是出错,得出的不是所有的乘积,而是最后一个数
结果除以255


var   i,k:integer;
begin
for   i:=10   to   1000   do
if   (i   mod   3=10)   and   (rightstr(inttostr(i),1)= '4 ')   then
begin
k:=1;
k:=i*k;
end;
label1.Caption:=inttostr(k);

看看,好奇怪啊

[解决办法]
var i,k:integer;
begin
k:=1;//此句应该放在循环外
for i:=10 to 1000 do
if (i mod 3=10) and (rightstr(inttostr(i),1)= '4 ') then
begin
k:=i*k;
end;
label1.Caption:=inttostr(k);
[解决办法]
这些数的累乘结果非常之大, 用Integer是根本无法保存的(Int64也不行), 只能换成浮点数类型了。

var
i: Integer;
k: Double;
begin
k := 1;
for i := 10 to 1000 do
if (i mod 3 = 0) and (i mod 10 = 4) then k := i * k;
label1.Caption := FloatToStr(k);
end;

[解决办法]
用Haskell计算结果:
Prelude> foldr (*) 1 [x|x <- [10..1000], x `mod` 3 == 0, x `mod` 10 ==4]
20553983621604168089736592814705526241000556016485632299306672719850972361445672484864
[解决办法]
这些数的累乘结果非常之大, 用Integer是根本无法保存的(Int64也不行), 只能换成浮点数类型了。

var
i: Integer;
k: Double;
begin
k := 1;
for i := 10 to 1000 do
if (i mod 3 = 0) and (i mod 10 = 4) then k := i * k;
label1.Caption := FloatToStr(k);
end;
==========================

热点排行