这段代码为啥无法输出正确值

img


int i=1,a=1;
    double s=0;
    do
    {
            a=a*i;
            s=s+1/a;
            i++;
    }while(a<100000);
    printf("%lf\n",s);

把s=s+1/a;改成s=s+1.0/a;

  1. 因为代码中第7行用了整数除法,整数除法的结果是整数,并且会向0取整,舍去小数部分。
s = s + 1 / a;

即当a > 1时,(1 / a) 得0,所以结果为1。

解决方案:
将变量a定义为double型。

  1. 这个不知道有没有问题,自然常数e的近似值是2.718281828459045,等于1 + 1/1! + 1/2! + 1/3!...+ 1/ n!,上面公式的结果少了1,但是题目也没说e就是自然常数。好吧 e = e - 1,给一个666。
int i=1;
float a=1;
    double s=0;
    do
    {
            a=a*i;
            s=s+1/a;
            i++;
    }while(1/a<0.00001);
    printf("%lf\n",s);