根据下列公式求s的值(要求用循环实现,要求s精确到小数点后三位):S=1/1!-1/2!+1/3!-……-1/10! ​说明:n!=1*2*3……*n。

根据下列公式求s的值(要求用循环实现,要求s精确到小数点后三位):S=1/1!-1/2!+1/3!-……-1/10!
​说明:n!=123……*n。



#include <stdio.h>

int main() {
int i, j;
double s = 1, factorial = 1;
for (i = 1, j = 1; j <= 10; i = -i, j++) {
factorial *= j;
s += i / factorial;
}
printf("S的值为:%.3f\n", s);
return 0;
}

C++👀

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    double s = 1.0; // 存储 s 的值
    int n = 10; // 给定的 n 值
    int sign = -1; // 用于表示正负号
    int fact = 1; // 存储阶乘的值

    for (int i = 2; i <= n; i++) {
        fact *= i; // 计算 i 的阶乘
        sign *= -1; // 正负号交替变化
        s += sign * 1.0 / fact; // 累加每一项的值
    }

    cout << setprecision(3) << fixed << s << endl; // 输出 s 的值(保留小数点后三位)

    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: C语言试题五十八之请编写函数fun,:计算并输出下列多项式的值(sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n! )中的 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    #include <stdio.h>
    
    double fun(int n)
    {
        double t, sn = 1.0;
        int i, j;
        for (i = 1; i < n; i++)
        {
            t = 1.0;
            for (j = 1; j <= i; j++)
                t = t * j;
            sn += 1.0 / t;
        }
        return sn;
    } 
    
    int main()
    {
        double sum = fun(4);
        printf("sum is %f\n", sum);
        return 0;
    }
  • 以下回答来自chatgpt:
    解决方案如下:
    ```python
    # 首先定义阶乘函数
    def factorial(n):
        if n < 2:
            return 1
        else:
            return n * factorial(n-1)
    
    # 然后使用循环计算S的值,精度保留小数点后3位
    n = 10  # 需要计算前10项
    S = 0
    for i in range(n+1):
        term = (-1)**i / factorial(i)
        S += term
    
    print('S的值为:', format(S, '.3f'))
    

    输出结果为:S的值为: 0.368,即S的值保留小数点后3位为0.368。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^