59 lines
1022 B
SQL
59 lines
1022 B
SQL
create or replace package ethiopian is
|
|
|
|
function multiply
|
|
( left in integer,
|
|
right in integer)
|
|
return integer;
|
|
|
|
end ethiopian;
|
|
/
|
|
|
|
create or replace package body ethiopian is
|
|
|
|
function is_even(item in integer) return boolean is
|
|
begin
|
|
return item mod 2 = 0;
|
|
end is_even;
|
|
|
|
function double(item in integer) return integer is
|
|
begin
|
|
return item * 2;
|
|
end double;
|
|
|
|
function half(item in integer) return integer is
|
|
begin
|
|
return trunc(item / 2);
|
|
end half;
|
|
|
|
function multiply
|
|
( left in integer,
|
|
right in integer)
|
|
return Integer
|
|
is
|
|
temp integer := 0;
|
|
plier integer := left;
|
|
plicand integer := right;
|
|
begin
|
|
|
|
loop
|
|
if not is_even(plier) then
|
|
temp := temp + plicand;
|
|
end if;
|
|
exit when plier <= 1;
|
|
plier := half(plier);
|
|
plicand := double(plicand);
|
|
end loop;
|
|
|
|
return temp;
|
|
|
|
end multiply;
|
|
|
|
end ethiopian;
|
|
/
|
|
|
|
/* example call */
|
|
begin
|
|
dbms_output.put_line(ethiopian.multiply(17, 34));
|
|
end;
|
|
/
|