求任意n的阶乘---有详细注释


void main()
{
    int n;  //要计算阶乘的n
    int bit=29999; //个位所在位置
    int i=1;   //从1开始做乘法

 
    int result[30000]={0}; //保留结果数组,用3万位
    int carry=0;           //某位与n相乘后的进位
    long tmp;              //某位与n相乘后的结果临时保存
    long t_bit=29999;      //上一次相乘后的最高位
 

    scanf("%d",&n);   //输入n
    result[29999]=1;  //个位初始为1
 
    while(i<=n)     //从1--n开始计算
    {
         while(carry!=0||bit>=t_bit)   //如果上一次相乘没有进位,且已经乘完最高位,则此相乘结束
             {  
                  tmp=result[bit]*i+carry;  //某一位与n相乘加上进位
                  result[bit]=tmp%10;       //当前位为结果与10取模 
                  carry=tmp/10;            //进位为当前结果除10
                  bit--;                   //向更高位计算

            }
  
          t_bit=bit+1;                //t_bit为上次结果的最高位
          i++;
          bit=29999;                  //下次相乘仍从个位开始
     }

 

   for(int j=t_bit;j<30000;j++)   //打印结果
   printf("%d",result[j]);

   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值