蓝桥杯(vip试题) 基础练习 阶乘计算

时间:2022-06-02 17:10:11
  基础练习 阶乘计算  时间限制:1.0s   内存限制:512.0MB      问题描述  输入一个正整数n,输出n!的值。
  其中n!=1*2*3*…*n
算法描述  n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数aA[0]表示a的个位,A[1]表示a的十位,依次类推。
  将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
  首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
输入格式  输入包含一个正整数nn<=1000。输出格式  输出n!的准确值。样例输入10样例输出3628800
  写这道题的目的很简单,因为以前从来没有接触过这么大数据的计算,冥思苦想了很久,想出了一个方法,虽说不是很强,但觉得自己有进步就是好的,现在把这题记录下来相互学习,也方便以后复习。。。。
#include<iostream>
using namespace std;
#define MAX 100000
int main()
{
int n,c = 0,s,j;
int sum[MAX] = { 1,1 };
cin >> n;
for (int i = 1; i <= n; i++) {
for (j = 1; j < MAX; j++) {
s = sum[j] * i + c;
sum[j] = s % 10;
c = s / 10;
}
}
for (j = MAX-1; j > 0; j--) {
if (sum[j])
break;
}
sum[0] = j;
while (j) {
cout << sum[j--];
}
cout << endl;
return 0;
}