杭电 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
- 杭电 1042【N的阶乘】
- 杭电ACM 1042 大数阶乘 N!
- 杭电HDU 1042大数阶乘N!
- 杭电—1042 大数阶乘 N!
- 杭电ACM—— 1042 N!大数阶乘
- 杭电OJ 1042 N!(大数阶乘模板)
- 杭电OJ(HDOJ)1018题:求n的阶乘位数(数学公式)
- 杭电-2674N!Again(大数阶乘)
- N的阶乘--N!
- 杭电 1042 N!
- 杭电 1042N!
- 杭电1042 N!
- 1042杭电 N!
- 杭电1042 N!
- 杭电1042N!
- 【杭电 1042】 N!
- 大数阶乘-N的阶乘
- 杭电1042 大数阶乘 JAVA
- HDU1754
- ubuntu搭建node.js+express
- 第一章 JAVA入门(Android安全模型)
- c++实验七-—项目2
- MarkDown用法
- 杭电 1042【N的阶乘】
- HDU2795
- 【转】一个好的学习算法的网站
- CORBA技术和Java技术的结合-Java IDL
- VS2010+Qt5.4.0 环境搭建(离线安装)
- c语言中的“宏”是指什么?
- 工作流Activity框架入门(一)
- C++作业7
- HDU1556