九度OJ 1076 N的阶乘 大数乘法
2017-03-12 10:04
381 查看
这一题和上一题的大数加法很接近,但是不能再用数组的一位表示数字的一位了,因为乘到后面每次的乘数都是好几位的了,用一位根本无法表示,所以这里用数组的一位表示四位数。
因为一位表示四位数,所以输出时要注意,若为“0001”,不能当做“1”输出了,应用“%04d”来输出。
题目描述:
输入一个正整数N,输出N的阶乘。
输入:
正整数N(0<=N<=1000)
输出:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入:
4
5
样例输出:
24
120
1307674368000
代码如下:
因为一位表示四位数,所以输出时要注意,若为“0001”,不能当做“1”输出了,应用“%04d”来输出。
题目描述:
输入一个正整数N,输出N的阶乘。
输入:
正整数N(0<=N<=1000)
输出:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入:
4
5
样例输出:
24
120
1307674368000
代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> struct bigint { int digit[1000]; int size; bigint operator * (const int &b) const //每次乘以一个小整数 { int carry = 0; bigint ans; memset(ans.digit,0,sizeof(ans.digit)); ans.size = 0; for(int i = 0; i < size; i++) { int t = digit[i] * b + carry; carry = t / 10000; ans.digit[ans.size++] = t % 10000; } if(carry > 0) ans.digit[ans.size++] = carry; return ans; } }; int main() { int n; while(scanf("%d",&n) != EOF) { if(n == 0) { printf("1\n"); continue; } bigint ans; memset(ans.digit,0,sizeof(ans.digit)); ans.size = 1; ans.digit[0] = 1; for(int i = 1; i <= n; i++) { ans = ans * i; } for(int i = ans.size-1; i >= 0; i--) { if(i == ans.size-1) printf("%d",ans.digit[i]); else printf("%04d",ans.digit[i]); } printf("\n"); } return 0; }
相关文章推荐
- 九度OJ 1076 N的阶乘 (高精度大数的乘法)
- C语言大数乘法求1000的阶乘(九度OJ 1076)
- 九度OJ 1076 N的阶乘 -- 大数运算
- 九度OJ 1076 N的阶乘 -- 大数运算
- 九度oj 1076 大数乘法
- 九度OJ 1076:N的阶乘 (数字特性、大数运算)
- 九度OJ 1076:N的阶乘 (数字特性、大数运算)
- 题目1076:N的阶乘(大数乘法)
- 九度OJ 1076 n的阶乘
- 九度OJ-1076:N的阶乘
- 九度oj 题目1076:N的阶乘
- N的阶乘 -- (九度OJ 大整数乘法)
- 九度 oj 题目1076:N的阶乘
- N的阶乘 -- (九度OJ 大整数乘法)
- 【九度OJ】题目1076:N的阶乘 解题报告
- HDU——1042N!(大数阶乘乘法)
- 九度OJ 1038:Sum of Factorials(阶乘的和) (DP、递归)
- 模拟乘法运算之N的阶乘(大数阶乘)
- 九度题目1076:N的阶乘
- LuoGu P1009 阶乘之和 (大数乘法,模拟)