解题思路:
注意事项:
参考代码:
#include <stdio.h>
#include <string.h>
#define MAX_DIGITS 10000 // 足够存储 1977!
// 大数结构体
typedef struct {
int digits[MAX_DIGITS]; // 从低位到高位存储
int length; // 实际位数
} BigInteger;
// 初始化大数
void initBigInteger(BigInteger *num, int value) {
memset(num->digits, 0, sizeof(num->digits));
num->length = 0;
if (value == 0) {
num->digits[0] = 0;
num->length = 1;
return;
}
while (value > 0) {
num->digits[num->length++] = value % 10;
value /= 10;
}
}
// 大数乘以一个整数
void multiplyByInt(BigInteger *num, int multiplier) {
int carry = 0;
for (int i = 0; i < num->length; i++) {
long long product = (long long)num->digits[i] * multiplier + carry;
num->digits[i] = product % 10;
carry = product / 10;
}
// 处理剩余的进位
while (carry > 0) {
num->digits[num->length++] = carry % 10;
carry /= 10;
}
}
// 打印大数
void printBigInteger(BigInteger *num) {
for (int i = num->length - 1; i >= 0; i--) {
printf("%d", num->digits[i]);
}
printf("\n");
}
int main() {
BigInteger result;
int n = 1977;
// 初始化结果为 1
initBigInteger(&result, 1);
// 计算 n!
for (int i = 2; i <= n; i++) {
multiplyByInt(&result, i);
}
printf("", n);
printBigInteger(&result);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复