蓝桥杯:阶乘计算
2016-03-09 17:21
232 查看
题目:
输入一个正整数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
分析:
本题和 高精度加法 类似。
代码:
输入一个正整数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<cstring> using namespace std; int main(){ int n; cin>>n; int a[10001]; if(n==1) cout<<"1"<<endl; else{ int h=0,e=0; memset(a,0,sizeof(a)); a[e]=1; int c; for(int i=2;i<=n;i++){ c=0; for(int j=h;j<=e;j++){ int p=a[j]*i+c; c=p/10; a[j]=p%10; } while(c){ e++; a[e]=c%10; c/=10; } } for(int k=e;k>=h;k--){ cout<<a[k]; } } return 0; }
相关文章推荐
- 记一次用pyCharm在 virtualEnv中 创建django项目
- [POJ1088] 滑雪(递归dp)
- iOS 【UIKit-UIImageView 的 contentMode 属性概述】
- Linux环境下实现SSH远程管理
- 2016年3月7日作业
- 九度-题目1432:叠筐
- [zz]如何在C语言程序中处理汉字
- 位运算
- 【Unity开发】NGUI动态刷新ScrollView
- 深入浅出RxJava(一:基础篇)
- django定义Model中的方法和属性
- ASP Girdview通过ButtonField获取行号与主键
- ytu 2392: 求各位数字之和
- hrbust 哈理工oj 2179 组合【基础dfs过】
- 【error】jQuery.ajax()报错Uncaught SyntaxError: Unexpected token
- [置顶] unity调用外部摄像头
- html5 页面嵌入视频
- Android开发中的View类的视图属性focusableInTouchMode这个属性跟focusable有什么区别?
- <mvc:annotation-driven />注解意义
- 创建项目骨架