求10000之内n的阶乘。ios
只有一行输入,整数n(0≤n≤10000)。git
一行,即n!的值。github
4ide
24spa
首先n的阶乘是从1开始相乘,乘到n为止的总乘积。定义很简单,可是要注意下数据范围,本题的n最大到达了10000。而13的阶乘就已经解决int范围的极限了,更别提10000了。这道题的答案很大,因此要用大数的方式来进行处理。code
另外,$n!=(n-1)!\times n $而n的范围又在10000之内,因此能够看做是一个大数乘一个int范围内数字的问题,就不用使用高精乘高精的方法了。视频
乘法计算时也是相似竖式计算的过程。将小的数字i与大数的每一位相乘,且从低位开始相乘。过程当中进行进位操做。ci
#include <iostream> using namespace std; int ans[100005]={1,1};//存放阶乘 ans[0]是位数 倒序存放数字 int jw[100005];//进位的值 int n; int main(){ cin>>n; for(int i=1;i<=n;i++){//遍历1~n //求出i的阶乘 // i!= (i-1)! * i for(int j=1;j<=ans[0];j++){ //ans[0]中存放阶乘的位数 ans[j]=ans[j]*i+jw[j];//将i与每一位进行相乘 jw[j]=0;//重置进位值 if(ans[j]>=10){//超过10要进位 jw[j+1]+=ans[j]/10;//记录进位值 ans[j]%=10;//保留个位 if(j==ans[0]) ans[0]++;//若是到了位数又发生进位,那么位数要发生变化 } } } for(int i=ans[0];i>=1;i--){//从高位开始倒序输出结果 cout<<ans[i]; } return 0; }
连接get
源码上传至Gitee仓库中,欢迎star!源码