------------------------------------------------------------------------
-- Author: happyflystone
-- Date : 2009-04-12 18:22:00
-- Ver: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)
-- Apr 14 2006 01:12:25
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
--
------------------------------------------------------------------------
declare @t int
set @T = 1000 --计算的阶乘
SET NOCOUNT ON
declare @ta table(id int identity(1,1) primary key,col bigint)
insert @ta(col) select 1
declare @n int,@i int,@c bigint,@len int,@tmp bigint
set @len=1;
set @n = @t
while (@n >=1)
begin
select @c = 0 ,@i = 1
select @tmp = col from @ta where id = @i
while (@i <= @len)
begin
set @tmp = @tmp*@n+@c
set @c = @tmp / 1000000000000000
set @tmp = @tmp % 1000000000000000
update @ta
set col = @tmp where id = @i;
set @i = @i + 1
if not exists(select 1 from @ta where id = @i)
insert @ta (col) select 0
select @tmp = col from @ta where id = @i
end
update @ta
set col = @c where id = @i;
if (@c>0)
set @len = @len + 1
set @n = @n - 1
end
delete from @ta where id >@len and col = 0
declare @s varchar(8000)
--显示串,5个一组
select @s =
isnull(@s+case when id%6 = 0 then char(13)+char(10) else ' ' end,'')
+right('000000000000000'+ltrim(col),15)
from @ta
order by id desc
select @s
SET NOCOUNT Off
--结果
/*
000000000000402 387260077093773
543702433923003 985719374864210 714632543799910 429938512398629 020592044208486
969404800479988 610197196058631 666872994808558 901323829669944 590997424504087
073759918823627 727188732519779 505950995276120 874975462497043 601418278094646
496291056393887 437886487337119 181045825783647 849977012476632 889835955735432
513185323958463 075557409114262 417474349347553 428646576611667 797396668820291
207379143853719 588249808126867 838374559731746 136085379534524 221586593201928
090878297308431 392844403281231 558611036976801 357304216168747 609675871348312
025478589320767 169132448426236 131412508780208 000261683151027 341827977704784
635868170164365 024153691398281 264810213092761 244896359928705 114964975419909
342221566832572 080821333186116 811553615836546 984046708975602 900950537616475
847728421889679 646244945160765 353408198901385 442487984959953 319101723355556
602139450399736 280750137837615 307127761926849 034352625200015 888535147331611
702103968175921 510907788019393 178114194545257 223865541461062 892187960223838
971476088506276 862967146674697 562911234082439 208160153780889 893964518263243
671616762179168 909779911903754 031274622289988 005195444414282 012187361745992
642956581746628 302955570299024 324153181617210 465832036786906 117260158783520
751516284225540 265170483304226 143974286933061 690897968482590 125458327168226
458066526769958 652682272807075 781391858178889 652208164348344 825993266043367
660176999612831 860788386150279 465955131156552 036093988180612 138558600301435
694527224206344 631797460594682 573103790084024 432438465657245 014402821885252
470935190620929 023136493273497 565513958720559 654228749774011 413346962715422
845862377387538 230483865688976 461927383814900 140767310446640 259899490222221
765904339901886 018566526485061 799702356193897 017860040811889 729918311021171
229845901641921 068884387121855 646124960798722 908519296819372 388642614839657
382291123125024 186649353143970 137428531926649 875337218940694 281434118520158
014123344828015 051399694290153 483077644569099 073152433278288 269864602789864
321139083506217 095002597389863 554277196742822 248757586765752 344220207573630
569498825087968 928162753848863 396909959826280 956121450994871 701244516461260
379029309120889 086942028510640 182154399457156 805941872748998 094254742173582
401063677404595 741785160829230 135358081840096 996372524230560 855903700624271
243416909004153 690105933983835 777939410970027 753472000000000 000000000000000
000000000000000 000000000000000 000000000000000 000000000000000 000000000000000
000000000000000 000000000000000 000000000000000 000000000000000 000000000000000
000000000000000 000000000000000 000000000000000 000000000000000 000000000000000
*/
----优化一次:2009-04-13
declare @t int,@c int ,@i int
set @I = 1000 --计算的阶乘
set @T = 1
SET NOCOUNT ON
declare @ta table(id int identity(1,1) primary key,col bigint)
insert @ta(col) select 1
while @T<=@I
begin
update @ta
set col=col*@T +isnull((select (col*@T/1000000000000000)
from @ta where id=a.id-1),0) ,
@c=(col*@T/1000000000000000)
from @ta a
if @c >0
insert into @ta(col) values(@c)
update @ta set col=col % 1000000000000000
set @T=@T+1
end
declare @s varchar(8000)
--显示串,个一组
select @s =
isnull(@s+case when id%5 = 0 then char(13)+char(10) else ' ' end,'')
+right('000000000000000'+ltrim(col),15)
from @ta
order by id desc
select @s
go
2009-4-15:谢谢的chenyonghui1988 提醒,在SQL2000下要强制类型转换:
declare @t int,@c int ,@i int
set @I = 1000 --计算1000的阶乘
set @T = 1
SET NOCOUNT ON
declare @ta table(id int identity(1,1) primary key,col bigint)
insert @ta(col) select 1
while @T<=@I
begin
update @ta
set col=col*@T +isnull((select (col*@T/1000000000000000)
from @ta where id=a.id-1),0) ,
@c=(col*@T/1000000000000000)
from @ta a
if @c >0
insert into @ta(col) values(@c)
update @ta set col=col % cast(1000000000000000 as bigint)
set @T=@T+1
end
declare @s varchar(8000)
--显示串,6个一组
select @s =
isnull(@s+case when id%5 = 0 then char(13)+char(10) else ' ' end,'')
+right('000000000000000'+ltrim(col),15)
from @ta
order by id desc
select @s
go
分享到:
相关推荐
为了处理这个问题,我们可以采用数组来存储大数,并通过逐位相乘的方式来计算阶乘的结果。在这个例子中,我们定义了一个长度为100000的数组`a[]`来存放每一位的数字。每个元素代表一个十进制数位上的数值。 #### ...
阶乘 阶乘计算 大数阶乘 大整数阶乘 用数组计算阶乘
- 在计算阶乘时,通常只需要使用整型变量(如`int`),但在本例中使用了`double`类型,这可能会导致精度损失。 - `sum`变量在这里的作用并不明确,因为阶乘通常只需要计算单个结果而不是累加所有中间结果。如果目的...
对于较小的n值,计算阶乘较为简单;但当n增大至如题目中的1000时,传统的整型数据类型(如int、long等)将无法存储如此庞大的结果。 ### 二、C++中的整型数据类型限制 在C++中,标准的整型数据类型(如int、long、...
在MATLAB中计算大整数的阶乘,如1000的阶乘,会遇到一个挑战:结果可能远远超出单个数值变量所能存储的最大值。因此,我们需要采用一种特殊的算法来处理这个问题,即使用数组存储每一位数字,并进行逐位乘法和移位...
`public static void method(int n)` 是计算阶乘的辅助方法,接收一个整数`n`作为参数,表示要计算的阶乘的基数。方法内部,使用`long`类型的变量`result`和`f`分别存储阶乘的和以及当前的阶乘值。 6. **循环计算*...
1. **堆栈传递参数的子程序调用**:在计算阶乘的过程中,可能需要调用子程序进行递归计算。堆栈在子程序调用中起到存储返回地址和临时数据的作用,确保调用和返回的正确性。 2. **递归调用方法**:阶乘的计算可以...
本项目提供的"Java计算阶乘 源代码"旨在帮助我们实现任意整数的阶乘计算。首先,我们需要理解什么是阶乘。阶乘是将一个正整数n与小于它的所有正整数相乘的结果,表示为n!。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。...
在计算机科学领域,大数阶乘的计算是一项挑战性任务,因为普通的整数运算库往往无法处理超过一定范围的大数。本主题将深入探讨如何计算大数阶乘,特别是那些远远超出普通整型数据类型的限制的数值。我们将讨论几种...
用 Stirling 逼近近似计算阶乘的探讨与应用 本文主要讨论了使用 Stirling 逼近近似计算阶乘的方法和应用。文章首先介绍了阶乘的重要性和应用,然后讨论了 Stirling 公式的来源和发展历史,接着分析了 Stirling 逼近...
计算1000以内的阶乘运算。自己动手实验了一下。请大家指正。
java中使用递归方法计算阶乘的代码示例
java 阶乘计算 呵呵呵呵呵呵呵呵呵呵呵
在这个主题中,我们将深入探讨如何使用函数来计算阶乘,并且聚焦于使用Visual Basic (VB)语言实现这一功能。VB是一种广泛使用的面向对象的编程语言,特别适合开发Windows应用程序。 **阶乘** 是一个数学概念,表示...
"高精度计算大数阶乘的C语言源代码和解释.pdf" 本资源提供了高精度计算大数阶乘的C语言源代码,旨在帮助开发者和程序员更好地理解和实现高精度计算大数阶乘的算法。 标题中的“高精度计算大数阶乘”是指在计算机...
【标题】:“计算器可计算大数阶乘(源码,BCB开发)”涉及的核心知识点主要围绕计算器的设计、大数处理以及使用Borland C++ Builder(BCB)作为开发工具。下面将对这些关键点进行详细介绍。 首先,**计算器设计**...
### C语言实现1000阶乘计算 #### 背景与目标 在计算机科学领域,阶乘是一个常见的数学概念,表示一个正整数n的所有小于及等于n的正整数的乘积,通常表示为n!。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。阶乘在组合...
根据提供的文件信息,本文将详细解析“计算阶乘的源代码”,主要涉及的知识点包括:JSP基础概念、HTML与JavaScript结合使用的方式、递归函数实现阶乘计算的方法。 ### JSP基础概念 JSP(JavaServer Pages)是一种...
尽管本文档主要关注于计算阶乘末尾0的数量,但该函数提供了一个示例性的实现方法,展示了如何存储和处理大数阶乘中的每位数。具体来说,它使用了一个动态数组来存储每一位的值,并通过逐位相乘的方法来计算阶乘的...
**基于MFC的简易计算阶乘的小程序** MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于简化Windows应用程序的开发。在这个基于MFC的小程序中,我们专注于实现一个计算整数阶乘的功能。阶乘是数学...