1, 1000的阶乘
这个算法主要有两个地方要注意, 一个就是大数的问题, 还有一个就是位数的问题,
只要这两个问题解决了,这个算法也就没有什么问题了,
①首先还是来说一下位数的问题, 有一个比较简单的办法,就是有一个人已经做了一个公式来
做位数的问题了: lnN!=NlnN-N+0.5ln(2N*pi), log10(N!)取整后加1就是1000!的位数,这里log10(N!)=lnN!/ln(10),
是不是很简单,看来数学这个东西还真是要学好不可啊,
②大数的问题, 因为在阶乘运算中,常常用一个long int型是不能够的,这样就要找其它的办法,要在存储数字,这样的话就只有数组了,
用数组里a[0]--个位,a[1]--十位,a[2]--百位.......这样不就可以表达所有的数了吗?
最后 1000阶乘源码
源文件:/Files/ouzi/WinForm/Factorial1000.rar
2, 快速排序法
快速排序法可以说是运用递归的最经典的例子,哦,这个话好象不对, 最经典的应该是这个Fibonacci了
我以前好象说过,我在项目中用的快速排序也不多,主要用的是插入排序法,因为插入排序法的代码相对少一些,也比较直观,
现在闲来无事,也就将这个做一下,快速排序法的主要思想就是不停的填位,再不停的分割,填位就是为了让基数左边的所有数都
小于基数,右边的数都大于基数(这个是按由小到大来说的).
Code
{
if (low >= height)
return;
int i = low;
int j = height;
int baseValue = array[i];
while (i < j)
{
while ((array[j] >= baseValue) && (i < j)) j--;
array[i] = array[j];
while ((array[i] <= baseValue) && (i < j)) i++;
array[j] = array[i];
}
array[i] = baseValue;
Sort(array, low, i - 1);
Sort(array, i + 1, height);
}
3,分页的存储过程
这个应该不能算是算法,但好象也不能不算,不管那么多了,就这样的吧,放到这里,这个存储过程中也有一些技巧的东西。
这个里面的sp_executesql的用法要注意,可以在存储过程中返回值,这样在分页中就不用返回两个表了,
DECLARE @sqlString NVARCHAR(500)
DECLARE @totalCount INT
SET @sqlString='SELECT @totalCount=COUNT(*) FROM Blog'
EXEC sp_executesql @sqlString,N'@totalCount INT OUTPUT',@totalCount OUT
PRINT @totalCount
4,两张表列的拼接
也就是没有关系的两张表的列拼接
----------------------------------------------------------------------------------------------------------------
算法之路永无止境---ouzi--just love it