Главная > Таинственная функция | ||
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; } Примечание: обе функции (на Паскале и Си++) исполняют один и тот же алгоритм. Функция вызывается от одного аргумента – натурального числа. |