• C语言 大数的阶乘


    求400的阶乘

    C/C++ code
    #define N 400 long a[8916]={1,0},n,i,c,len; int main(void) { n=N; for ( len=1;n>1; n--) { for (c=0,i=0; i<len;i++ ) { a[i]= ( c+= a[i]*n ) % 10000; c/=10000; } ((a[i]=c)>0)?len++:0; } for( len--,printf("%d",a[len--]);len>=0; len--) printf("%04d",a[len]); return 0; }

    【解释】

     for ( len=1;n>1; n--)     //把len的长度初始为1,因为数组中已经有一个元素了a[0]=1
     {
       for (c=0,i=0; i<len;i++ ) //c初始为0,一开始还没运算哪来的进位,这是个内层循环,数组a中的len
                              //个元素都必须参与运算,都必须*n,这就是下面a[i]*n的来由

         {
               a[i]= ( c+= a[i]*n ) % 10; c/=10;   //c是进位,不用说了,c+=a[i]*n,a每个元素与n
                                                    //相乘必须考虑低位是否有进位,有就加起来
         }

       ((a[i]=c)>0)?len++:0;  //最后一个元素也有进位吗,有的话就在当前的元素的下个数组位置直接等于进位值,并
                              // 且数组的元素值 要加1,没有的话什么都不干 ,光一个0什么都不是
                       
      }


     

  • 相关阅读:
    numpy之数组属性与方法
    numpy之数组创建
    matplotlib之直方图
    matplotlib之条形图
    matplotlib之散点图
    matplotlib之折线图
    Kettle使用教程之数据同步
    Kettle使用教程之Job使用
    Kettle使用教程之安装与资源库的创建
    Ubuntu16.04配置单机版Zookeeper和Kafka
  • 原文地址:https://www.cnblogs.com/xianghang123/p/2152430.html
Copyright © 2020-2023  润新知