declare @t int
set @T = 40 --计算40的阶乘
SET NOCOUNT ON
declare @ta table(id int identity(1,1),col bigint)
insert @ta(col) select 1
declare @n int,@i int,@c bigint,@len int,@tmp bigint,@tp 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 @tp = @tmp
set @tmp = @tmp % 10000;
update @ta
set col = @tmp where id = @i;
set @c = @tp / 10000
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
declare @s varchar(8000)
select @s = isnull(@s+' ','')+right('0000'+ltrim(col),4)
from @ta
order by id desc
select @s
SET NOCOUNT Off
public class biginteger
{
public static void main(String[] args)
{
BigDecimal bd = new BigDecimal(1);
for(int i=1000;i>0;i--)
{
bd = bd.multiply(new BigDecimal(i));
}
System.out.println("result = "+bd);
BigInteger result = BigInteger.ONE;
for (int i = 1; i <= 1000; i++)
result = result.multiply(new BigInteger("" + i));
System.out.println("result = " + result.toString());
}
}