蓝桥杯基础练习VIP-阶乘计算(高精度)
时间限制: 3s 内存限制: 192MB 提交: 4869 解决: 2471
题目描述
输入一个正整数n,输出n!的值。
其中n!=123…n。
输入格式
输入包含一个正整数n,n< =1000。
输出格式
输出n!的准确值。
样例输入
复制
10
样例输出
复制
3628800
思路:利用数组a来储存每个位的数字,乘法的时候就每位先乘之后再加上进位(可以保证如果超出原本数位也保证精度),如果进位carry不为0 的话说明下一个数字的位数要加1,再对下一位调整;
代码:
#include <stdio.h>
#include <string.h>
#define maxn 10004
int main() {
int a[maxn];
memset(a, 0, sizeof(a));
a[0] = 1;
int n;
scanf("%d", &n);
int len = 1;
for (int i = 1; i <= n; i++) {
int carry = 0;
for (int j = 0; j < len; j++) {
a[j] *= i;
a[j] += carry;
carry = a[j] / 10;
a[j] %= 10;
if (carry > 0 && j == len - 1) len++;
}
}
for (int i = len - 1; i >= 0; i--) printf("%d", a[i]);
printf("\n");
return 0;
}