// 080419: Power 값이 음수인 경우도 처리가능하게 추가
주의사항
소수점 단위는 처리가 안되며, 속도도 Math 라이브러리의 Power 와
비슷하거나 조금 느리므로 참고용으로만 사용하길 추천
원리이해
A * B = 0에 A 를 B 번 더한 것 = A 에 A를 B - 1 번 더한 것
A ** B = 1에 A 를 B 번 곱한 것 = A에 A 를 B - 1 번 곱한 것
Integer 형을 이용한 구현 코드
> 이중 for 문 사용
function Pow(B, P: Integer): Integer;
var
I: Integer;
J: Integer;
Default: Integer;
begin
Result := 1;
if P = 0 then Exit;
for I := 1 to P do
begin
Default := Result;
for J := 2 to B do
Result := Result + Default;
end;
end;
> 1중 for 문으로 수정
같은 알고리즘에 루프 변수만 1개를 사용함.
function Pow(Base, Power: Integer): Integer;
var
I: Integer;
Def: Integer;
begin
Result := 1;
if Power = 0 then Exit;
Result := Base;
Dec(Base);
for I := 0 to (Base * (Power - 1)) - 1 do
begin
if I mod Base = 0 then
Def := Result;
Result := Result + Def;
end;
end;
> Power 값이 음수인 경우도 계산
function Pow(Base, Power: Integer): Extended;
function PowPos(Base, Power: Integer): Integer;
var
I: Integer;
Def: Integer;
begin
Result := Base;
Dec(Base);
Def := 0;
for I := 0 to (Base * (Power - 1)) - 1 do
begin
if I mod Base = 0 then Def := Result;
Inc(Result, Def);
end;
end;
begin
if Power > 0 then
Result := PowPos(Base, Power)
else if Power < 0 then
Result := 1 / PowPos(Base, Power * -1)
else
Result := 1;
end;
'Windows > RAD Studio' 카테고리의 다른 글
[DEL, CB] 도움말에서 CLX 제거하기 (0) | 2008.02.12 |
---|---|
[DEL] 메세지 구분자 (0) | 2008.02.11 |
사업자등록번호 검증 (C++) (0) | 2008.01.05 |
주민등록번호 검증 (Delphi) (0) | 2008.01.02 |
윤년계산 (C++, Delphi) (0) | 2008.01.02 |