蓝桥杯基础练习VIP-阶乘计算(高精度)

发布时间 2024-01-05 11:07:17作者: zhanghanchen

蓝桥杯基础练习VIP-阶乘计算(高精度)

时间限制: 3s 内存限制: 192MB 提交: 4869 解决: 2471

题目描述

输入一个正整数n,输出n!的值。

其中n!=123n。

输入格式

输入包含一个正整数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;
}