一个很有用的自定义函数(判断自然数是否包含2的指定次幂)
发表于:2007-07-02来源:作者:点击数:
标签:
/* Name : Fun_WheIncludedFunction : 判断选定的数字是否在给定的整数中可以知道任何一个自然数都可以拆分成若干个2的幂的和,如:1=2^02=2^13=2^0+ 2^14=2^25=2^0+ 2^26=2^1+ 2^47=2^0+ 2^1 +2^28=2^39=2^0+ 2^310=2^1+ 2^311=2^0+ 2^1 +2^312=2^2+ 2^313=
/* Name : Fun_WheIncluded Function : 判断选定的数字是否在给定的整数中 可以知道任何一个自然数都可以拆分成若干个2的幂的和,如: 1 = 2^0 2 = 2^1 3 = 2^0 + 2^1 4 = 2^2 5 = 2^0 + 2^2 6 = 2^1 + 2^4 7 = 2^0 + 2^1 + 2^2 8 = 2^3 9 = 2^0 + 2^3 10 = 2^1 + 2^3 11 = 2^0 + 2^1 + 2^3 12 = 2^2 + 2^3 13 = 2^0 + 2^2 + 2^3 14 = 2^1 + 2^2 + 2^3 15 = 2^0 + 2^1 + 2^2 + 2^3 16 = 2^4 17 = 2^0 + 2^4 将任意一个数解析为2的幂的和的方法——递归 规律: 如给定 14 ∵ 2^3 < 14 < 2^4 ∴ 14中必有8——2^3 14 - 8 = 6 ∵ 2^2 < 6 < 2^3 ∴ 6中必有4——2^2 6 - 4 = 2 ∵ 2 = 2 ∴ 14 = 2^3 + 2^2 + 2^1
Parameters : @TotalNum Type: INT @SpecifiedNum Type: INT Steps : Author : Waxdoll Cheung Date : 2005-03-21*/
CREATE FUNCTION dbo.Fun_WheIncluded ( @TotalNum INT, @SpecifiedNum INT )RETURNS BIT AS BEGIN
DECLARE @varRet BIT
DECLARE @varLoop INT
SET @varLoop = 0
WHILE (@TotalNum >= CAST(POWER(2, @VarLoop) AS INT)) SET @varLoop = @varLoop + 1
SET @TotalNum = @TotalNum - CAST(POWER(2, @varLoop - 1) AS INT)
IF (@varLoop = @SpecifiedNum + 1) SET @varRet = 1 ELSE BEGIN IF (@TotalNum >= 1) RETURN dbo.Fun_WheIncluded(@TotalNum, @SpecifiedNum) ELSE SET @varRet = 0 END
RETURN @varRetEND
原文转自:http://www.ltesting.net