首页 > ACM题库 > 九度OJ > 九度-1179-阶乘[解题代码]
2013
12-13

九度-1179-阶乘[解题代码]

题目来源:2000年华中科技大学计算机研究生机试真题

题目描述:

输入n,
求y1=1!+3!+…m!(m是小于等于n的最大奇数)
y2=2!+4!+…p!(p是小于等于n的最大偶数)。

输入:

每组输入包括1个整数:n

输出:

可能有多组测试数据,对于每组数据,
输出题目要求的y1和y2

样例输入:
4
样例输出:
7 26

cpp 代码如下:
/*
 * 阶乘.cpp
 *
 *  Created on: 2012-3-15
 *      Author: Administrator
 */

#include <stdio.h>
#include <iostream>
using namespace std;

unsigned long long f(int n){
	unsigned long long sum = 1;
	while(n)
		sum *= n--;
	return sum;
}
int main(){
	int n;
	while(scanf("%d",&n) != EOF){
		unsigned long long sum1=0,sum2=0;

		for(int i=1; i<=n; i++){
			if(i%2 !=0 )
				sum1 += f(i);
			else
				sum2 += f(i);
		}

		cout <<sum1<<" "<<sum2<<endl;
	}
	return 0;
}

/**************************************************************
	Problem: 1179
	User: coder
	Language: C++
	Result: Accepted
	Time:10 ms
	Memory:1512 kb
****************************************************************/


  1. int half(int *array,int len,int key)
    {
    int l=0,r=len;
    while(l<r)
    {
    int m=(l+r)>>1;
    if(key>array )l=m+1;
    else if(key<array )r=m;
    else return m;
    }
    return -1;
    }
    这种就能避免一些Bug
    l,m,r
    左边是l,m;右边就是m+1,r;