#include <stdio.h>
long long a,ans=0,now,tmp;
long long gt(long long x)
{
//printf("%lld\n",x);
if(x==0)
return 0;
tmp=1;
while(tmp<=x)tmp*=(long long)3;
if((tmp/2)<x)
return gt(tmp-x)+1;
return gt(x-(tmp/3))+1;
}
int main() {
scanf("%lld",&a);
printf("%lld",gt(a));
return 0;
}
This code defines a function `gt` that takes a number `x` and returns a count. It finds the smallest power of 3 greater than `x`, then decides whether to subtract `x` from that power or subtract that power divided by 3 from `x`, and recursively counts steps. The program reads a number and prints the result of `gt`.
- The condition `if((tmp/2)<x)` is unusual. Think about what the midpoint between `tmp/3` and `tmp` is, and whether comparing to `tmp/2` correctly decides which subtraction is closer to zero.
- The variable `tmp` is global and reused across recursive calls. Consider how this might affect the value of `tmp` when the function calls itself, especially in the `else` branch.