简单数学题,我循环时出错,给个代码参考下
列举出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;
==========================
顶