【九度OJ】1179:阶乘
2017-09-02 15:15
155 查看
地址:
http://ac.jobdu.com/problem.php?pid=1179
题目描述:
输入n,
求y1=1!+3!+…m!(m是小于等于n的最大奇数)
y2=2!+4!+…p!(p是小于等于n的最大偶数)。
输入:
每组输入包括1个整数:n
输出:
可能有多组测试数据,对于每组数据,
输出题目要求的y1和y2
样例输入:
4
样例输出:
7 26
来源:
2000年华中科技大学计算机研究生机试真题
解题思路:
一开始以为会涉及大整数,就懒得写,就去搜了一下其他人已经AC的代码,发现人家只是用unsigned long long 类型就搞定了,便使用unsigned long long。一开始声明了一个数组Fac[100],用来存储已经计算过的n!,这样可以减少运算次数。
源码:
http://ac.jobdu.com/problem.php?pid=1179
题目描述:
输入n,
求y1=1!+3!+…m!(m是小于等于n的最大奇数)
y2=2!+4!+…p!(p是小于等于n的最大偶数)。
输入:
每组输入包括1个整数:n
输出:
可能有多组测试数据,对于每组数据,
输出题目要求的y1和y2
样例输入:
4
样例输出:
7 26
来源:
2000年华中科技大学计算机研究生机试真题
解题思路:
一开始以为会涉及大整数,就懒得写,就去搜了一下其他人已经AC的代码,发现人家只是用unsigned long long 类型就搞定了,便使用unsigned long long。一开始声明了一个数组Fac[100],用来存储已经计算过的n!,这样可以减少运算次数。
源码:
#include<stdio.h> int n; unsigned long long int y1; unsigned long long int y2; unsigned long long int fact[ 100 ]; //保存n! unsigned long long int Fac( int num ){ if( num == 1 ){ return 1; } if( fact[ num ] != 0 ){ return fact[ num ]; } return num * Fac( num - 1 ); } int main(){ while( scanf( "%d", &n ) != EOF ){ y1 = 0; y2 = 0; for( int i = 1; i < n + 1; i ++ ){ if( i % 2 == 1 ){ //奇数 fact[ i ] = Fac( i ); //用数组保存i! y1 += fact[ i ]; } else{ //偶数 fact[ i ] = Fac( i ); //用数组保存i! y2 += fact[ i ]; } } printf( "%lld %lld\n", y1, y2 ); } } /************************************************************** Problem: 1179 User: 螺小旋 Language: C++ Result: Accepted Time:0 ms Memory:1020 kb ****************************************************************/
相关文章推荐
- 九度OJ 1179:阶乘 (循环)
- 九度OJ 1179:阶乘 (循环)
- 九度OJ 1179 阶乘(模拟)
- 九度oj 题目1179:阶乘
- 【九度OJ】题目1179:阶乘 解题报告
- 九度oj-1179-阶乘
- 九度oj 1179 阶乘
- C语言大数乘法求1000的阶乘(九度OJ 1076)
- 九度题目1179:阶乘
- 九度论坛--上机题1179:阶乘
- 【九度OJ】题目1076:N的阶乘 解题报告
- 九度OJ 1076 n的阶乘
- 九度OJ 1067 n的阶乘 (模拟)
- 九度OJ 1076 N的阶乘 (高精度大数的乘法)
- 九度 OJ 1067:n的阶乘
- 九度OJ 1067:n的阶乘 (数字特性)
- 九度 oj 题目1076:N的阶乘
- 九度OJ-1076:N的阶乘
- 九度OJ 1067:n的阶乘 (数字特性)
- N的阶乘 -- (九度OJ 大整数乘法)