【叶子函数分享四十】将一个正整数分解为m个2的n次方的和
2014-11-13 18:03
169 查看
-- =============================================
-- Author: <maco_wang>
-- Create date: <2011-01-21>
-- Description: <将一个正整数分解为m个2的n次方的和>
-- =============================================
go
--创建函数
CREATE function GetSumSequence(@num INT)
returns nvarchar(200)
AS
BEGIN
DECLARE @numc INT
SET @numc = @num
DECLARE @numstr VARCHAR(50)
SET @numstr = ''
WHILE ( @num <> 0 )
BEGIN
SET @numstr = @numstr + CONVERT(CHAR(1), @num % 2)
SET @num = @num / 2
END
--SELECT REVERSE(@numstr)
DECLARE @i INT
SET @i = LEN(@numstr)
DECLARE @j VARCHAR(MAX)
SET @j = ''
WHILE ( @i > 0 )
BEGIN
IF ( SUBSTRING(REVERSE(@numstr), LEN(@numstr) - @i + 1, 1) = '1' )
SELECT @j = @j + '+2^' + CAST (@i-1 AS VARCHAR(10))
SET @i = @i - 1
END
return (CAST(@numc AS VARCHAR(100)) + '=' + STUFF(@j, 1, 1, ''))
END
go
--测试示例
select dbo.GetSumSequence(12)
select dbo.GetSumSequence(65)
select dbo.GetSumSequence(892)
select dbo.GetSumSequence(1919191)
--运行结果
/*
12=2^3+2^2
65=2^6+2^0
892=2^9+2^8+2^6+2^5+2^4+2^3+2^2
1919191=2^20+2^19+2^18+2^16+2^14+2^11+2^7+2^6+2^4+2^2+2^1+2^0
*/
-- Author: <maco_wang>
-- Create date: <2011-01-21>
-- Description: <将一个正整数分解为m个2的n次方的和>
-- =============================================
go
--创建函数
CREATE function GetSumSequence(@num INT)
returns nvarchar(200)
AS
BEGIN
DECLARE @numc INT
SET @numc = @num
DECLARE @numstr VARCHAR(50)
SET @numstr = ''
WHILE ( @num <> 0 )
BEGIN
SET @numstr = @numstr + CONVERT(CHAR(1), @num % 2)
SET @num = @num / 2
END
--SELECT REVERSE(@numstr)
DECLARE @i INT
SET @i = LEN(@numstr)
DECLARE @j VARCHAR(MAX)
SET @j = ''
WHILE ( @i > 0 )
BEGIN
IF ( SUBSTRING(REVERSE(@numstr), LEN(@numstr) - @i + 1, 1) = '1' )
SELECT @j = @j + '+2^' + CAST (@i-1 AS VARCHAR(10))
SET @i = @i - 1
END
return (CAST(@numc AS VARCHAR(100)) + '=' + STUFF(@j, 1, 1, ''))
END
go
--测试示例
select dbo.GetSumSequence(12)
select dbo.GetSumSequence(65)
select dbo.GetSumSequence(892)
select dbo.GetSumSequence(1919191)
--运行结果
/*
12=2^3+2^2
65=2^6+2^0
892=2^9+2^8+2^6+2^5+2^4+2^3+2^2
1919191=2^20+2^19+2^18+2^16+2^14+2^11+2^7+2^6+2^4+2^2+2^1+2^0
*/
相关文章推荐
- 【叶子函数分享四十】将一个正整数分解为m个2的n次方的和
- 【叶子函数分享四十五】返回两个时间范围内的一个随机时间
- 将一个正整数分解为m个2的n次方的和
- 【叶子函数分享十八】人民币小写金额转大写
- 【叶子函数分享八】取出字符串中的汉字、字母或是数字
- 【叶子函数分享一】去除字符串中的html标记及标记中的内容
- 【叶子函数分享二】去除字符串中连续的分割符
- 【叶子函数分享三十八】得到条形码的校验位函数
- 【叶子函数分享十六】多个数据项的字符串取指定位置字符
- 分享一个DoNet 下 datagridview导出到excel的函数
- 【叶子函数分享七】生成n位随机字符串
- 【叶子函数分享十二】根据身份证得到生日函数
- 【叶子函数分享三十七】求字符串中汉字的个数
- 【叶子函数分享十三】根据身份证计算性别函数
- 【叶子函数分享十四】将身份证的15位号码升级为18位
- 【叶子函数分享九】根据字符分割字符串的三种写法
- 经典的100个C算法__(4)将一个正整数分解质因数
- 将一个正整数分解为一系列不重复的整数的和
- 【叶子函数分享四】综合模糊查询
- 【叶子函数分享十一】取汉字首字母的两个函数