#region 用两个栈实现队列的功能
class CQueue<T> where T : IComparable<T>
{
private Stack<T> enterQ = new Stack<T>();
private Stack<T> outQ = new Stack<T>();
public void AppendTail(T data)
{
enterQ.Push(data);
}
public T DeleteTail()
{
T outData;
if (outQ.Count()== 0)
{
while (enterQ.Count() > 0)
{
outQ.Push(enterQ.Pop());
}
}
if (outQ.Count == 0)
outData = default(T);
else
outData = outQ.Pop();
return outData;
}
}
#endregion
#region 数组的整数次方
public bool DoubleEqual(double num1,double num2)
{
if ((num1 - num2) < 0.0000001 && (num1 - num2) > -0.0000001)
{
return true;
}
else
return false;
}
public double Power(double myBase, int exponent)
{
double result=1.0;
try
{
if (DoubleEqual(myBase,0.0) == true)//注意1,double的数因为精度问题,不能直接比较
{
throw new Exception("基数不能为0!");
}
if (exponent < 0)//考虑exponent问负数的情况
{
myBase = 1 / myBase;
exponent = -exponent;
}
result = PowerWithUnsignedExponent(myBase, (uint)exponent);
Console.WriteLine(result);
}
catch (Exception ex)//异常处理
{
Console.WriteLine(ex.Message);
}
return result;
}
//a^n=a^(n/2)*a^(n/2)(n为偶数),a^n=a^(n/2-1)*a^(n/2-1)*a(n为奇数数)
public double PowerWithUnsignedExponent(double myBase, uint exponent)
{
if (exponent == 0)
return 1;
if (exponent == 1)
return myBase;
double result = PowerWithUnsignedExponent(myBase, exponent >> 1);//a^(n-1)=a^(n/2-1)*a^(n/2-1)
result *= result;
if ((exponent & 0x1) == 1)
result *= myBase;//a^n = a^(n-1)*a
return result;
}
#endregion
边看边写(二)
最新推荐文章于 2023-03-11 15:44:14 发布