用MSSQL计算2的10000次方

 我们知道BIGINT的最大值是2^63-1,也就是9,223,372,036,854,775,807,那么2^64是多少呢?再往上呢?穷极无聊的我写了个计算2的N次方的语句,不过超过100后好像速度就慢下来了,用这个语句计算10000次方花了10分钟才出来数。放出300技术分,看看谁写的SQL语句能最快的算出2的10000次方?

 

 

SET NOCOUNT ON
GO
USE TEMPDB
GO
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(ID INT PRIMARY KEY,VAL BIGINT)
;WITH MU AS (
SELECT 1 AS ID,1 AS VAL
UNION ALL
SELECT ID+1,0 FROM MU WHERE ID<10000    --10000行预留,大致估计10000次方只需要1000行左右。
)
INSERT INTO TB
SELECT * FROM MU OPTION(MAXRECURSION 0)
DECLARE @I INT ,@COUNT INT,@RESULT VARCHAR(MAX)
SELECT @I=1,@RESULT='',@COUNT=10000    --@COUNT=10000就是计算2的10000次方
WHILE @I<=@COUNT
BEGIN
UPDATE T1 SET T1.VAL=(T1.VAL*2+CASE WHEN T2.VAL>=500000000000000000 THEN 1 ELSE 0 END)%1000000000000000000
FROM TB T1
LEFT JOIN TB T2 ON T1.ID=T2.ID+1
SET @I=@I+1
END
SELECT @RESULT=@RESULT+CONVERT(VARCHAR(20),VAL) FROM TB
WHERE VAL>0
ORDER BY ID DESC
SELECT @RESULT
SET NOCOUNT OFF

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值