在论坛看到 牛人们的 思路  特此收藏啊  以备学习

----------本机测试 1秒---------

用decimal(38,0),0秒:

SET NOCOUNT ON

GO

IF OBJECT_ID('BASED') IS NOT NULL DROP TABLE BASED

IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB

GO

CREATE TABLE BASED(ID INT PRIMARY KEY,VAL BIGINT)

INSERT INTO BASED SELECT 0,1 union all

SELECT id,power(convert(decimal(38,0),2),id) FROM(

select number as id from master..spt_values where type='p' and number>0 and number<57

)T

insert into BASED select number+57,power(convert(decimal(38,0),2),56)*power(2,number+1) from master..spt_values where type='p' and number<4

--以上求出2^1~2^60,因power函数在2^56以上时有舍去位,故分两步处理,以乘法代之

DECLARE @I INT ,@COUNT INT,@RESULT VARCHAR(MAX),@P60 decimal(38,0),@Pleft decimal(38,0)

SELECT @I=1,@RESULT='',@COUNT=10000    --@COUNT=10000就是计算2的10000次方

select @P60=val from BASED where id=60

select @Pleft=val from BASED where id=@count % 60

CREATE TABLE TB(ID INT PRIMARY KEY,VAL decimal(38,0))

INSERT INTO TB SELECT 1,1

INSERT INTO TB

SELECT number,0 FROM(

select number from master..spt_values where type='p' and number>1 and number<=@count/60+2

)T

--设总行数为 @count/60+2

WHILE @I<=@COUNT/60

BEGIN

UPDATE T1 SET T1.VAL= (T1.VAL*@P60+floor((isnull(T2.VAL,0)*@P60+floor(isnull(t3.val,0)*@P60/10000000000000000000))/10000000000000000000))%10000000000000000000

FROM TB T1 LEFT JOIN TB T2 ON T1.ID=T2.ID+1 left join tb t3 on t2.id=t3.id+1

SET @I=@I+1

END

-- @count/60 次 @P60 相乘

UPDATE T1 SET T1.VAL= (T1.VAL*@Pleft+floor((isnull(T2.VAL,0)*@Pleft+floor(isnull(t3.val,0)*@Pleft/10000000000000000000))/10000000000000000000))%10000000000000000000

FROM TB T1 LEFT JOIN TB T2 ON T1.ID=T2.ID+1 left join tb t3 on t2.id=t3.id+1

--乘以剩下的 2^(@count % 60)

SELECT @RESULT=@RESULT+right('000000000000'+CONVERT(VARCHAR(19),VAL),19) FROM TB

WHERE VAL>0

ORDER BY ID DESC

--SELECT @RESULT=CONVERT(VARCHAR(10),VAL)+@RESULT FROM TB

--WHERE  and id=@count/30+2

SELECT right(@RESULT,LEN(@RESULT)-PATINDEX('%[1-9]%',@RESULT)+1)

SET NOCOUNT OFF

/*

199506311688075838488374216268358508382349683188619245

.....

*/

每次运算都*2^30,最后一次补足10000,循环数量变为原来的1/30了,而且每次的运算都是由系统进行,比进位运算要快很多,肯定是顺间出来的。

---------------本机22秒

A的B次方

create FUNCTION [dbo].[powerX](@loopnumber bigint,@loopcount int)

RETURNS varchar(max)

AS

BEGIN

declare @str varchar(max)

declare @loop int

declare @len int

declare @num bigint

declare @add int

declare @output varchar(max)

set @str=cast(@loopnumber as varchar(max))

set @loop=1

while (@loop

begin

set @output=''

set @add=0

set @len=len(@str)

while (@len!=0)

begin

set @num = cast(substring(@str,@len,1) as int)

set @num=@num*@loopnumber+@add

set @add=@num/10

set @output=cast(@num%10 as varchar(max))  +@output

set @len=@len-1

end

if(@add>=1)

begin

set @output = cast(@add as varchar(max))+@output

end

set @loop=@loop+1

set @str=@output

end

return @str

end

declare @val bigint

select @val=cast(dbo.powerX(2,25)as bigint)

select dbo.powerX(@val,400)

-------------------

java 6789的10000次方,用MSSQL计算2的10000次方相关推荐

  1. 为什么c语言2的n次方减一,计算2的N次方........有什么错吗?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 int a[MAX]=0; ---------------- 这一句不对吧... 运行结果 Please Input N :10 2的10次方= 4199 ...

  2. 2的零次方加到2的n次方c语言,计算2的N次方........有什么错吗?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 int a[MAX]=0; ---------------- 这一句不对吧... 运行结果 Please Input N :10 2的10次方= 4199 ...

  3. python计算2的n次方编写_Python计算一元函数的N次方多项式

    第一种: from datetime import datetime #f(x)=a0+a1x+a2x*2+a3x**3+... def f(a,x): p=0 for i in range(0,le ...

  4. java 既然出现double类型×2的n次方的时候计算结果出现偏差

    java 既然出现double类型×2的n次方的时候计算结果出现偏差! 代码如下: package Com.Aftvc.tsing; public class example {  /**   * @ ...

  5. java计算2的n次方_Java程序练习-计算2的N次方

    计算2的N次方时间限制: 1000ms内存限制: 65536kB 描述任意给定一个正整数N(N<=100),计算2的N次方的值. 输入输入只有一个正整数N. 输出输出2的N次方的值. 样例输入5 ...

  6. java 计算x的n次方

    x的n次方,可以用简单的迭代方法自乘n次,但这种方法十分低效. 可以用两种方法 代码如下: //计算x的n次方的方法, public class X_n {public static void mai ...

  7. 从键盘上录入两个整数,计算a的b次方的结果

    从键盘上录入两个整数,计算a的b次方的结果 /*** 从键盘上录入两个整数,计算a的b次方的结果*/import java.util.Scanner;public class Test25 {publ ...

  8. 信息学奥数一本通(1170:计算2的N次方)

    1170:计算2的N次方 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 15778     通过数: 8179 [题目描述] 任意给定一个正整数N(N<=1 ...

  9. [Java] 蓝桥杯BASIC-30 基础练习 阶乘计算

    问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表 ...

最新文章

  1. GNUGK 作为Gatekeeper穿透防火墙和NAT
  2. PonyAI的首份美国无人出租成绩单:总数1271趟,15%拼车
  3. 【面试必备】java写spark好不好
  4. .net动态控件的使用(listview ,treeview,tabControl)
  5. mPaaS小程序技术架构深度解析
  6. 【opencv学习】基于透视变换和OCR识别的小票识别
  7. C++ 数据结构第二章 ----- 线性表
  8. BZOJ2769 : YY的快速排序
  9. wget 下载需要登录验证的网页文件
  10. 基础线性代数知识点总结与回顾(四):线性空间
  11. Tomcat中的ResourceBundle国际化解析
  12. JavaScript自动切换并播放视频 | Tampermonkey
  13. 计算机获取信息的过程是,“获取信息的过程与方法”的教学案例
  14. 【esp8266】【Node.js】【Websocket】esp8266和Node.js通过websocket进行通信,实验记录及踩坑记录
  15. C++ 二元一次不定方程巧妙求解——运用扩展欧几里得算法
  16. html中蝴蝶飞飞怎么制作,幼儿园小班《蝴蝶飞飞》教案
  17. 《设计心理学》学习笔记之设计未来(第四册)
  18. 《计算机组成原理》——计算题
  19. 世卫批准强生新冠疫苗紧急使用权;美洲邮轮业停摆一年后将复航;IMAX将入驻上海多个商业地标 | 美通企业周刊...
  20. 一键GHOST优盘版安装XP/win7系统

热门文章

  1. tp中url地址大小写问题
  2. Clr编写Insert Triggr
  3. 10-1 channel
  4. 15-4 队列实现调度器
  5. python抽取指定url页面的title_Python新手写爬虫全过程记录分析
  6. html中异步上传文件实现示例,HTML_html中异步上传文件实现示例,复制代码代码如下: form actio - phpStudy...
  7. vsn服务器 需要先建项目才能,急求!项目马上上线,但是Oracle服务器存在问题...
  8. android 多个模块,Android 模块化中两个模块之间传递model
  9. java大津法确定阈值,大津法得到自适应阈值
  10. Python: 函数参数传递机制