A
UBB · Informatică
186

Se consideră algoritmul spirala(n, sens), unde n este un număr natural (n10n \ge 10). Algoritmul utilizează operatorul << (bitwise left shift), echivalent cu înmulțirea cu 2k2^k. Cifre(x) returnează numărul de cifre al lui x.

Algoritm 1

Algorithm spirala(n, sens)
  If n < 10 then Return n EndIf
  u ← n MOD 10
  p ← n
  While p ≥ 10 execute p ← p DIV 10 EndWhile
  temp ← n DIV 10
  mij ← temp MOD (1 << (Cifre(temp) − 1))
  If sens = 1 then rez ← u * 10 + p
  Else rez ← p * 10 + u EndIf
  If mij = 0 then Return rez EndIf
  Return rez + spirala(mij, 1 − sens) * 100
EndAlgorithm

Algoritm 2

Algorithm Cifre(x)
  If x = 0 then Return 0 EndIf
  Return 1 + Cifre(x DIV 10)
EndAlgorithm

Pentru apelul spirala(67812, 1), ce valoare va returna algoritmul?

36 / 37