目标是算出1!+3!+5!……+17!,答案不对,逻辑哪里错了呢?

img


我的结果算的好大好大,起码有个三十几位…看不出来,到底哪出问题了?

在第2个for 之前,给 d 赋值
d=1;
64 行改成
printf("\n%lf",sum);
双精度数打印用 %lf

#include <stdio.h>
int main()
{
    double    d,sum,c,i;
    sum = 0for(c=1;c<=17;c=c+2)
    {
        d=1;
        for(i=1;i<=c;i++)
        {
            d=d*i;
        }
        sum=sum+d;
    }
    printf("\n%lf",sum);
    return 0;
}


3!其实等于1!*2*3
5!=3!*4*5
(n+2)!=n!*(n+1)*(n+2)
你的内层循环完全没有必要,即使一定要写,也要在循环之前将d重置为1,否则越乘越大

第二个for之前先初始化d=1
这个还能优化,不用每次都从1开始算。