如何做这道循环
求3+33+333+3333+... ...+33...3(10个3)。
[解决办法]
想简单点,让计算机好算
10*3*power(10,0) + 9*3*power(10,1) + 8*3*power(10,2) + ... + 1*3*power(10,10)
use math;
for iTmp := 10 down to 1 do
sum := sum + iTmp * 3 * Power(10, 10 - iTmp);
甚至可以把1,10,100,1000,...,1000000000放到一个是个元素的数组里面
[解决办法]
var
i,k:integer;
sum:double;
begin
for i:=0 to 9 do
for k:=0 to i do
sum:=sum+power(10,k)*3;
end;
[解决办法]
大数计算。如果你想用更大的数,得到更精确的结果,需要用数组模拟整数计算。下面这个可以计算到100个3。
const
BigIntLen = 1000;
type
BigInt = array[1..BigIntLen] of byte;
function BigIntAdd(A, B: BigInt): BigInt;
var
i: integer;
addr, carry: Byte;
begin
carry := 0;
for i := BigIntLen downto 1 do
begin
addr := A[i] + B[i] + carry;
carry := addr div 10;
result[i] := addr mod 10;
end;
end;
function BigIntToStr(A: BigInt): string;
var
LeadZero: boolean;
i: integer;
begin
Result := ' ';
LeadZero := True;
for i := 1 to BigIntLen - 1 do
if not (LeadZero and (A[i] = 0)) then
begin
LeadZero := False;
Result := Result + IntToStr(A[i]);
end;
Result := Result + IntToStr(A[BigIntLen]);
end;
procedure TForm1.Button1Click(Sender: TObject);
const
MAXLen=100;
var
Values: array[1..MAXLen] of BigInt;
i, k: integer;
begin
for i := 1 to MaxLen do
begin
for k := 1 to BigIntLen - i do
Values[i][k] := 0;
for k := BigIntLen - i + 1 to BigIntLen do
Values[i][k] := 3;
end;
for i := 2 to MaxLen do
begin
Values[1] := BigIntAdd(Values[1], Values[i]);
end;
ShowMessage(BigIntToStr(Values[1]));
end;