int power(int t, int k) // возведение t в степень k
{
int res = 1;
while (k)
{
if (k & 1)
res *= t;
t *= t;
k >>= 1;
}
return res;
}
и почему так дохера на на шарпе?
static int Pow2(int a, int b)//Int32-версия
{
if (b > 2 && (a > 1 || a < -1))
{
bool sgn = false;
if (a < 0) { if (b % 2 != 0) sgn = true; a = -a; }
if (a < 1291)
{
if (a > 215) { if (b > 3) throw new OverflowException();
else return sgn ? -pow[a + 406] : pow[a + 406]; }
else
{
if (ind[a] + b - 3 >= ind[a + 1]) throw new OverflowException();
else return sgn ? -pow[ind[a] + b] : pow[ind[a] + b];
}
}
else throw new OverflowException();
}
else
{
if (b == 2) return checked(a * a);
if (b == 1) return a;
if (b == 0) return 1;//0^0 тоже принято за 1
if (a == 1) return 1;
if (a == 0 && b > 0) return 0;
if (a == -1) return b % 2 == 0 ? 1 : -1;
throw new InvalidOperationException();
}
}