【清华机试】N!(0<=N<=1000)
2016-08-04 15:58
267 查看
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn = 3002; // 1000 的阶乘约 2600 位 int a[maxn] = {0}; // 存储 N 的阶乘 char num[1002][maxn] = {0}; // 存储每一个 N! int main() { int i = 2; // 遍历2-n int j = 1; int len = 1; // 数组长度,默认为1 int count = 0; // 计数器 // 求解 1!~1000!, 空间换时间 a[1] = 1; for(i = 2; i <= 1000; ++i) { // 每一位乘以i for(j = 1; j <= len; ++j) { a[j] *= i; } // 移位 for(j = 1; j <= len; ++j) { if(a[j] > 9) { a[j+1] += a[j]/10; a[j] %= 10; // 处理高位进位 if(len == j) { len++; } } } // 不用过滤前面的0, len就指向的最高位 count = 0; for(j = len; j >= 1; --j) { num[i][count++] = '0'+a[j]; } num[i][count] = '\0'; // 存储结尾的'\0' } int n; while(cin >> n) { if(n == 0) { // 0! cout << "1" << endl; } else { printf("%s\n", num ); } } return 0; }
相关文章推荐
- (10.31)字符串由字母和数字组成,找出其中最大数字(长度0<n<=1000)
- 2006年清华大学计算机复试机试真题(求N的阶乘 N <= 1000)
- 一个大小为N(0<N<1000)的整数数组, 求该数组的子数组(长度大于2)为等差数列的个数?
- [南阳OJ-No.22]素数求和问题|现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。
- 两点距离 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 输入两点坐标(X1,Y1),(X2,Y2)(0<=x1,x2,y1,y2<=1000),计算并输出两点间的距离。
- 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并
- Ubuntu恢复普通用户权限<1000:1000改为0:0>后只能guest身份进入系统(亲测有效)
- 【清华机试】整数拆分
- 清华机试:有前序 中序,输出后序。
- 数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0<x<100,元素个数也是大于0, 小于100 。
- 求解N的阶乘(N&lt;=1000)
- To Fill or Not to Fill<2011浙大复试机试>
- js 判断 0<15<30返回值是 true
- POJ 2417 baby_step giant_step 小步大步算法 a^x == b(mod n) 求解0<=x<n的值
- this.Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>window.setInterval(timefresh, 1000);</script>");
- 将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m
- where top1000(X)<=10等条件谓词提前问题记录
- 算法题:问题:输入一个数n(0<x<10),输入由1-n组成的所有可组成的数
- 数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0<x<100,元素个数也是大于0, 小于100 。
- 【清华机试】质因数的个数