| Главная > Таинственная функция | ||
| 1999 |
Выберите одну из приведенных ниже функций, на понятном Вам языке программирования и определите ее назначение. Постарайтесь строго доказать Ваше утверждение.
function func(x: longint): longint;
var
y, z: longint;
begin
func := -1;
x := x - 1;
if x mod 8 <> 0 then
exit;
y := 1;
z := 2;
x := x div 8;
repeat
if odd(x) then begin
x := x - y - z;
y := y + z + z;
end;
x := x div 2;
z := z * 2;
until x <= 0;
if odd(x) then begin
x := x + y - z;
y := z + z - y;
end;
if x = 0 then
func := y;
end;
long func(long x) {
if (--x % 8) return -1;
x /= 8;
long y = 1, z = 2;
do {
if (x % 2) {
x -= y + z;
y += 2 * z;
}
x /= 2;
z *= 2;
} while (x > 0);
if (x % 2) {
x += y - z;
y = 2 * z - y;
}
if (x)
return -1;
else
return y;
}
Примечание: обе функции (на Паскале и Си++) исполняют один и тот же алгоритм. Функция вызывается от одного аргумента – натурального числа. |
|