边看边写(二)
来源:互联网 发布:php导出excel报表 编辑:程序博客网 时间:2024/05/21 11:36
#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