杭电 1042【N的阶乘】

来源:互联网 发布:淘宝几块钱的硅脂 编辑:程序博客网 时间:2024/05/18 02:59

N!

Problem Description
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!

Input
One N in one line, process to the end of file.
 
Output
For each N, output N! in one line.
 
Sample Input
123

Sample Output
126
/**求N!,即求N的阶乘,N最大为10000,大数求积*(他人代码借鉴所得)*/#include<iostream>using namespace std;int main(){//数组a中存放相乘的结果,设为100000位int a[100000];//n中负责接收需进行阶乘的数字,i,j,k为方便运算而使用的变量    int i,j,k,b,c,n;//使用while循环,进行循环运算,当n有输入且n大于等于0时循环继续    while(cin>>n&&n>=0)    {//每次运算前通过memset函数对数组a清零处理        memset(a,0,100000*sizeof(int));//a[0]作为底数需要赋值为1,以便于之后的运算以及n等于0的情况//k负责记录目前乘积结果的最大位数,因此每次运算前也要赋值为1        a[0]=1;k=1;//当n为0或1时阶乘的结果都是1,所以当n大于1时采用n以内的for循环进行阶乘运算        for(i=2;i<=n;i++)        {//用于进位运算的变量n每一次乘法前都要清零处理            c=0;//在最高位k以内进行乘法运算            for(j=0;j<k;j++)            {//b作为运算中间值寄存器使用                b=a[j]*i+c;//每一次单步运算后都要进行进位处理,所进位数存放在c中,如上一步所示,下一次for循环中在下一位参与运算                a[j]=b%10;                c=b/10;            }//for循环完毕后如最高位仍有进位,通过while循环进行持续进位处理,直到再无进位            while(c)            {//进位处理,同时k进行最高位位数记录                a[k++]=c%10;                c/=10;            }        }//按照数组输出规则从高位进行输出        for(i=k-1;i>=0;i--)        {            cout<<a[i];        }        cout<<endl;    }    return 0;}


0 0
原创粉丝点击