蓝桥杯 VIP 阶乘计算
发布时间:2020-12-14 02:36:15 所属栏目:大数据 来源:网络整理
导读:?基础练习 阶乘计算 ? 时间限制:1.0s ? 内存限制:512.0MB ??? ??? 问题描述 输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表
?基础练习 阶乘计算 ?
时间限制:1.0s ? 内存限制:512.0MB
???
???
问题描述
输入一个正整数n,输出n!的值。
其中n!=1*2*3*…*n。
算法描述
n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。 首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
输入格式
输入包含一个正整数n,n<=1000。
输出格式
输出n!的准确值。
样例输入
10
样例输出
3628800
#include <iostream> #include <cmath> #include <stdio.h> #include <string> #include <cstring> #include <map> #include <set> #include <vector> #include <stack> #include <queue> #include <iomanip> #include <algorithm> #include <memory.h> #define MAX 10000 using namespace std; int num[MAX]; void init() { memset(num,sizeof(num)); num[0]=1; } void carry() { int i; for(i=0;i<MAX-1;i++) { if(num[i]>9) { num[i+1]+=num[i]/10; num[i]%=10; } } } void mul(int n) { for(int i=0;i<MAX;i++) num[i]*=n; carry(); } void output() { int e; for(int i=9999;i>=0;i--) { if(num[i]!=0) { e=i; break; } } for(int i=e;i>=0;i--) { cout<<num[i]; } cout<<endl; } int main() { int n,i; init(); cin>>n; for(i=1;i<=n;i++) { mul(i); } output(); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |