首先题目:计算**1!+ 2!+ 3!+ … + 20! = **
int i , j ;
double sum = 0 , amass = 1 ; //每一项积
for( i = 1 ; i <= 20 ; i++ )
{
for( j = 1 ; j <= i ; j++ )
{
amass = amass * j ;
}
sum = sum + amass ;
amass = 1 ;
}
/*或者
for ( i = 1 ; i <= 20 ; i++ )
{
amass = amass * i ;
sum = sum + amass ;
}
*/
printf( "1阶...20阶的和为%22.15e\n" , sum ) ;
结果是:
为何这里sum、amass使用 double类型呢?
解答:因为在VC++6.0中 int 和long型数据在内存中占4个字节,数据的范围在-21亿~21亿,无法容纳所得结果。因此定义为double型提高精度。