当前位置:网站首页>Factorial summation

Factorial summation

2022-06-21 14:47:00 User 6978604

Title source :C Language network 1014

Problem description

seek Sn=1!+2!+3!+4!+5!+…+n! It's worth , among n It's a number (n No more than 20).

The sample input

5

Sample output

153

problem solving

/*
 * @Author: YaleXin
 * @Date: 2020-05-22 20:40:31
 * @LastEditTime: 2020-05-22 22:19:56
 * @LastEditors: YaleXin
 * @Description:
 * @FilePath: \my_c_workspace\dotcpp\1014.c
 * @ Prayer does not appear BUG
 */
#include <stdio.h>
#define MAX_NUM 100
typedef struct factorial {
    int factorial[100];
} f;
f num[25];
int ans[100] = {0};
//  High precision storage 
void setNum(int index) {
    if (index == 1) {
        num[1].factorial[1] = 1;
        return;
    } else {
        int c = 0, mul = 0, i;
        for (i = 1;; i++) {
            mul = (num[index - 1].factorial[i] * index + c) % MAX_NUM;
            c = (num[index - 1].factorial[i] * index + c) / MAX_NUM;
            num[index].factorial[i] = mul;
            if ((mul + c + num[index - 1].factorial[i + 1]) == 0) break;
        }
    }
}
int addAns(int index) {
    int c = 0, i, sum = 0;
    for (i = 1;; i++) {
        sum = (ans[i] + num[index].factorial[i] + c) % MAX_NUM;
        c = (ans[i] + num[index].factorial[i] + c) / MAX_NUM;
        ans[i] = sum;
        if ((sum + c + ans[i + 1]) == 0) break;
    }
    return i;
}
int main() {
    int n, i, len;
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        setNum(i);
        len = addAns(i);
    }
    for (i = len - 1; i >= 1; i--) {
        //  The first leading zero is removed 
        if (ans[i] < 10 && i != len - 1) {
            printf("0%d", ans[i]);
        } else {
            //  Single digit zero filling 
            printf("%d", ans[i]);
        }
    }
    return 0;
}
原网站

版权声明
本文为[User 6978604]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/172/202206211444492919.html