`
xiaoer_1982
  • 浏览: 1870509 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

计算1000的阶乘

阅读更多

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

-- 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
*/

----优化一次:20090413

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

分享到:
评论

相关推荐

    高精度计算1000阶乘

    为了处理这个问题,我们可以采用数组来存储大数,并通过逐位相乘的方式来计算阶乘的结果。在这个例子中,我们定义了一个长度为100000的数组`a[]`来存放每一位的数字。每个元素代表一个十进制数位上的数值。 #### ...

    阶乘计算 大数阶乘 大整数阶乘 用数组计算阶乘

    阶乘 阶乘计算 大数阶乘 大整数阶乘 用数组计算阶乘

    用C语言计算20的阶乘

    - 在计算阶乘时,通常只需要使用整型变量(如`int`),但在本例中使用了`double`类型,这可能会导致精度损失。 - `sum`变量在这里的作用并不明确,因为阶乘通常只需要计算单个结果而不是累加所有中间结果。如果目的...

    c++1000的阶乘

    对于较小的n值,计算阶乘较为简单;但当n增大至如题目中的1000时,传统的整型数据类型(如int、long等)将无法存储如此庞大的结果。 ### 二、C++中的整型数据类型限制 在C++中,标准的整型数据类型(如int、long、...

    matlab编程求1000的阶乘

    在MATLAB中计算大整数的阶乘,如1000的阶乘,会遇到一个挑战:结果可能远远超出单个数值变量所能存储的最大值。因此,我们需要采用一种特殊的算法来处理这个问题,即使用数组存储每一位数字,并进行逐位乘法和移位...

    java源代码--阶乘的计算

    `public static void method(int n)` 是计算阶乘的辅助方法,接收一个整数`n`作为参数,表示要计算的阶乘的基数。方法内部,使用`long`类型的变量`result`和`f`分别存储阶乘的和以及当前的阶乘值。 6. **循环计算*...

    微机原理与接口——计算N的阶乘

    1. **堆栈传递参数的子程序调用**:在计算阶乘的过程中,可能需要调用子程序进行递归计算。堆栈在子程序调用中起到存储返回地址和临时数据的作用,确保调用和返回的正确性。 2. **递归调用方法**:阶乘的计算可以...

    Java计算阶乘 源代码

    本项目提供的"Java计算阶乘 源代码"旨在帮助我们实现任意整数的阶乘计算。首先,我们需要理解什么是阶乘。阶乘是将一个正整数n与小于它的所有正整数相乘的结果,表示为n!。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。...

    计算大数的阶乘方法,内有详细解释

    在计算机科学领域,大数阶乘的计算是一项挑战性任务,因为普通的整数运算库往往无法处理超过一定范围的大数。本主题将深入探讨如何计算大数阶乘,特别是那些远远超出普通整型数据类型的限制的数值。我们将讨论几种...

    用Stirling逼近近似计算阶乘的探讨与应用.doc

    用 Stirling 逼近近似计算阶乘的探讨与应用 本文主要讨论了使用 Stirling 逼近近似计算阶乘的方法和应用。文章首先介绍了阶乘的重要性和应用,然后讨论了 Stirling 公式的来源和发展历史,接着分析了 Stirling 逼近...

    计算N的阶乘(n<1000) 试验编码

    计算1000以内的阶乘运算。自己动手实验了一下。请大家指正。

    使用递归计算阶乘

    java中使用递归方法计算阶乘的代码示例

    计算阶乘 java

    java 阶乘计算 呵呵呵呵呵呵呵呵呵呵呵

    函数方式计算n阶乘和vb语言

    在这个主题中,我们将深入探讨如何使用函数来计算阶乘,并且聚焦于使用Visual Basic (VB)语言实现这一功能。VB是一种广泛使用的面向对象的编程语言,特别适合开发Windows应用程序。 **阶乘** 是一个数学概念,表示...

    高精度计算大数阶乘的C语言源代码和解释.pdf

    "高精度计算大数阶乘的C语言源代码和解释.pdf" 本资源提供了高精度计算大数阶乘的C语言源代码,旨在帮助开发者和程序员更好地理解和实现高精度计算大数阶乘的算法。 标题中的“高精度计算大数阶乘”是指在计算机...

    计算器可计算大数阶乘(源码,BCB开发)

    【标题】:“计算器可计算大数阶乘(源码,BCB开发)”涉及的核心知识点主要围绕计算器的设计、大数处理以及使用Borland C++ Builder(BCB)作为开发工具。下面将对这些关键点进行详细介绍。 首先,**计算器设计**...

    c语言1000阶乘

    ### C语言实现1000阶乘计算 #### 背景与目标 在计算机科学领域,阶乘是一个常见的数学概念,表示一个正整数n的所有小于及等于n的正整数的乘积,通常表示为n!。例如,5! = 5 × 4 × 3 × 2 × 1 = 120。阶乘在组合...

    计算阶乘的的源代码

    根据提供的文件信息,本文将详细解析“计算阶乘的源代码”,主要涉及的知识点包括:JSP基础概念、HTML与JavaScript结合使用的方式、递归函数实现阶乘计算的方法。 ### JSP基础概念 JSP(JavaServer Pages)是一种...

    C++版本计算n阶乘末尾0的个数原理讲解及代码实现

    尽管本文档主要关注于计算阶乘末尾0的数量,但该函数提供了一个示例性的实现方法,展示了如何存储和处理大数阶乘中的每位数。具体来说,它使用了一个动态数组来存储每一位的值,并通过逐位相乘的方法来计算阶乘的...

    基于MFC的简易计算阶乘的小程序

    **基于MFC的简易计算阶乘的小程序** MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于简化Windows应用程序的开发。在这个基于MFC的小程序中,我们专注于实现一个计算整数阶乘的功能。阶乘是数学...

Global site tag (gtag.js) - Google Analytics