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

怎么做这道循环

2012-02-05 
如何做这道循环求3+33+333+3333+......+33...3(10个3)。[解决办法]想简单点,让计算机好算10*3*power(10,0)

如何做这道循环
求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;

热点排行