#include <iostream>
double power(double x, unsigned pow, double _acc = 1)
{
if (pow == 0) return _acc;
if (pow%2)
return power(x, pow - 1, _acc * x);
else
return power(x * x, pow / 2, _acc);
}
double power(double x, int y)
{
unsigned pow = static_cast<unsigned>(y >= 0 ? y : -(y+1) + 1UL);
double x_pow = power(x, pow);
return (y >= 0 ? x_pow : 1. / x_pow);
}
int main()
{
std::cout << power(2, 5) << std::endl;
std::cout << power(2.5, 3) << std::endl;
std::cout << power(2, -5) << std::endl;
std::cout << power(-1., 200000) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKZG91YmxlIHBvd2VyKGRvdWJsZSB4LCB1bnNpZ25lZCBwb3csIGRvdWJsZSBfYWNjID0gMSkKewoJaWYgKHBvdyA9PSAwKSByZXR1cm4gX2FjYzsKCWlmIChwb3clMikKCQlyZXR1cm4gcG93ZXIoeCwgcG93IC0gMSwgX2FjYyAqIHgpOwoJZWxzZQoJCXJldHVybiBwb3dlcih4ICogeCwgcG93IC8gMiwgX2FjYyk7Cn0KCmRvdWJsZSBwb3dlcihkb3VibGUgeCwgaW50IHkpCnsKCXVuc2lnbmVkIHBvdyAgID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHkgPj0gMCA/IHkgOiAtKHkrMSkgKyAxVUwpOwoJZG91YmxlIHhfcG93ID0gcG93ZXIoeCwgcG93KTsKCXJldHVybiAoeSA+PSAwID8geF9wb3cgOiAxLiAvIHhfcG93KTsKfQoKaW50IG1haW4oKSAKewoJc3RkOjpjb3V0IDw8IHBvd2VyKDIsIDUpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCBwb3dlcigyLjUsIDMpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCBwb3dlcigyLCAtNSkgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8IHBvd2VyKC0xLiwgMjAwMDAwKSA8PCBzdGQ6OmVuZGw7Cn0=