超过int型数据范围使用double类型高精度

首先题目:计算**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型提高精度。

猜你喜欢

转载自blog.csdn.net/angelsweet/article/details/104277836