I stumbled onto this blog (Antonio Gulli) the other day and read through a couple of his suggested programming problems.
Kind of interesting to tackle that power function. After coming up with a rather naive solution to begin with, I attempted to improve on it and ended up with the following implementation for XY that works when X and Y are integers. As I wanted to keep it rooted in the .NET framework implementation I needed to use the BigInteger class so the function will not return a value for negative Y values just yet :)
What do you think?
using System;
using System.Numerics;
internal class Program
{
private static void Main(string[] args)
{
int x = 2;
int y = 2000;
BigInteger pow = Pow(x, y);
Console.WriteLine("{0}^{1}={2}", x, y, pow);
}
private static BigInteger Pow(int x, int y)
{
if (y == 0) return 1; // Zero power
int ay = Math.Abs(y);
BigInteger pow = 1;
BigInteger sum = x;
if (ay > 0)
{
var iterations = (int) Math.Ceiling(Math.Log(ay, 2));
for (int i = 0; i <= iterations; ++i)
{
if (ay == 0) break;
if (ay%2 != 0) pow *= sum;
sum *= sum;
ay = ay/2;
}
}
// Handle negative powers (Well this will work when we have BigDecimal in System.Numerics)
return y < 0 ? 1/pow : pow;
}
}
Developer & Programmer with +15 years professional experience building software.
Seeking WFH, remoting or freelance opportunities.