递归函数求阶乘输出结果不对

求1-n各自阶乘的和,这代码输出结果不对,求修改


#include 
double fac(int n) 
{     
    double f;            
    if(n==1)      
        f=1;            
    else     
        f=n*fac(n-1); 
       return f;
}
int main()
{     
    double s=0;           
    int i,n;             
    scanf("%d",&n);
    for(i=1;i<=n;i++)                     
        s=s+fac(n);              
    printf("s=%.2lf",s);           
}

不可以用double,应该用long long,否则它只有14个有效数字,个位附近的数字肯定不对