Unix timestamp to days, months, years
std::atoi() is a poor choice of conversion function, as its means of reporting errors is indistinguishable from a valid conversion.  The necessary header hasn't been included anyway.
uint8_t is not declared - did you mean std::uint8_t from &lt;cstdint&gt;?  Similarly, you probably meant to include &lt;cstdio&gt; for std::printf, and &lt;iostream&gt; isn't used.
The repeated calculations during the division of seconds into days, hours, minutes and seconds should be simplified.  I'd go with something like
auto seconds = now % 60;
auto minutes = now / 60;
auto hours = minutes / 60;
auto days = hours / 24;
minutes %= 60;
hours %= 24;

Perhaps even consider making a class for mixed base arithmetic.
The calculation of leap years is flawed, because it gives 100 leap years per 400 years, rather than the 97 expected.
Instead of looping over months, it might be better to keep an array of the start of month as Julian day, so we can use a straightforward binary search to identify the month number and day within month.
Calendrical calculations are often easier if we use a year beginning on the 1st of March for computation (so that leap day is the last day in year), then convert January/February dates to the correct year as a final step.
I'd encourage the use of a function (perhaps with the same signature as std::gmtime()) rather than shoving everything directly into main().
return 0; can be omitted from the end of main() .