基础练习 阶乘计算
时间限制:1.0s 内存限制:512.0MB
问题描述
算法描述
n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
将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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。