阶乘求和,自己写的程序运行错误,求解哪里错误,

#include <stdio.h>
int main()
{
double n,a,c=1,sum=0;
scanf("%d",&n);
for(n=n;n>0;n--)
{    
    a=n;
    for(a=a;a>=1;--a)
    { 
        c*=a;   
    }
        sum+=c;
}
printf("%lf",sum);
return 0;
}

循环控制变量不要用浮点型要用定点型,第5行是错的,两个循环控制变量写的摸不着头脑。
#include <stdio.h>
int main()
{
long n,a,c=1,sum=0;
scanf("%ld",&n);
for(a=1; a<=n; a++)
{
c=c*a;
sum=sum+c;
}
printf("%ld",sum);
return 0;
}