如题:
用高精度计算出 S = 1!+ 2!+ 3!+ ⋯ + n!(n≤50)。其中 !表示阶乘,定义为 n != n×(n−1)×(n−2)×⋯×1。例如,5 != 5×4×3×2×1 = 120。
但是在C语言中,一个int所能表示的大小是有限,的即使是无符号的整型,最大为2^32-1,如果使用长整型,或者long long,它的最大值为2^64-1,但是对于这个n,当n足够大的时候,必然就会存在越界,就无法表示出来该数值,如果使用double或者long double,因为数据太大,则会出现精度丢失的问题。故此,我们可以使用数组进行存储并进行计算。
代码如下,即可实现,如果超过一百位数字,直接修改size的大小即可。
#include<stdio.h>
#define size 1000
void yiwei(int num[size]);
int main() {
int num = 0;
scanf("%d", &num);
int number[size] = { 0 };
number[0] = 1;
for (int i = 1;i <= num;i++) {
for (int j = 0;j < size;j++) {
number[j] *= i;
}
yiwei(number);
}
int i = size - 1;
for (i= size - 1;i >= 0;i--) {
if (number[i] != 0) {
break;
}
}
for (i = i;i >= 0;i--) {
printf("%d", number[i]);
}
return 0;
}
void yiwei(int num[size]) {
for (int i = 0;i < size;i++) {
if (num[i] > 10) {
num[i + 1] += num[i] / 10;
num[i] %= 10;
}
}
}