各种计算1000阶乘的技巧

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()); 


    }

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值