微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C语言常见算法——求大数阶乘!

注意点:

1 是大数的阶乘

2 注意会溢出

/*************************************************************************     > File Name: Factorial.c     > Author: hai--feng     > Mail: haif[email protected]     > Created Time: Tue 26 Mar 2013 08:11:03 AM CST  ************************************************************************/ #include <stdio.h> void Factorial( int val ) {     int Data[ 10000 ] = { 0 };     int media = 1;              //有效数据个数     int ii = 0,ij = 0;     if( 0 > val )     {         printf( "param is illegal!\n" );     }     else     {         if( val == 0 )    //0的阶乘为1         {             Data[ media - 1 ] = 1;         }         else         {             for( ii = 1; ii <= val; ii++ )    //循环val次             {                 for( ij = 0; ij < media; ij++ )     //每一次对于当前数据求阶乘                 {                     if( ( 1 == media ) && ( 1 == ii ) )   //如果是1的阶乘                     {                         Data[ ij ] = 1;                     }                     else                     {                         Data[ ij ] *= ii;    //求每一个单元的值                     }                 }                 for( ij = 0; ij < media; ij++ )        //进位                 {                     if( ( ij < ( media -1 ) ) && ( Data[ ij ] >= 10 ) )       //如果在当前的有效数据范围内部                     {                         Data[ ij + 1 ] += Data[ ij ] / 10;                         Data[ ij ] %= 10;                     }                     else if( ( ij == ( media -1 ) ) && ( Data[ ij ] >= 10 ) )     //如果在当前的有效数据范围外部,有效数据个数++                     {                         Data[ media ] += Data[ ij ] / 10;                         Data[ ij ] %= 10;                         media++;                     }                 }             }         }         for( ii = ( media - 1 ); ii >= 0; ii-- )         {             printf( "%2d",Data[ ii ] );         }         printf( "\n" );     } } int main(void) {     int factorial = 0;     while( 1 )     {         printf( "enter number:" );         scanf( "%d",&factorial );         Factorial( factorial );     }          return 0; } 思想:  如n!,循环次数为n,对于每一次循环,对应位算出结果,然后算出对于10的余数,其商进位。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐