注意点:
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] 举报,一经查实,本站将立刻删除。