1586 - 阶乘

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB


输入n,<br />

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

<br />

题目输入


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

<br />

题目输出


可能有多组测试数据,对于每组数据,<br />

输出题目要求的y1和y2

<br />

输入/输出样例

输入格式

3
4

输出格式

7 2
7 26

C语言解答

#include <stdio.h>

int main ()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		long long int y1=0,y2=0;
		long long int plus=1;
		for(int i=1;i<=n;i++)
		{
			plus *= i;
			//printf("%djishu\n",plus);
			y1 +=plus;
			if(++i<=n)
			{
				plus *= i;
				//printf("%doushu\n",plus);
				//printf("%dy2\n",y2);
				y2 +=plus;
				//printf("%dy2\n",y2);
			}
		}
		printf("%lld %lld\n",y1,y2);
	}
}

C++解答

#include <stdio.h> 
#include <algorithm> 
#include <iostream> 
using namespace std; 
long long int f[30]; 
void solve(){ 
    long long int i,tmp=1; 
      
    for(i=1;i<21;i++){ 
        tmp=tmp*i; 
        f[i]=tmp; 
    }    
} 
  
int main(){ 
    int n,i; 
    long long int y1,y2; 
      
    solve(); 
    while(scanf("%d",&n)==1){ 
        y1=y2=0; 
        for(i=1;i<=n;i++){ 
            if(i%2==1) 
                y1+=f[i]; 
            else 
                y2+=f[i];    
        } 
        printf("%lld %lld\n",y1,y2);    
    } 
    return 0; 
}

Java解答

import java.util.Scanner;
public class Main
{
	public static void main(String[] args)
	{
		int n, i;
		long y1, y2;
		Scanner sc = new Scanner(System.in);
		s();
		while (sc.hasNext())
		{
			n = sc.nextInt();
			y1 = y2 = 0;
			for (i = 1; i <= n; i++)
			{
				if (i % 2 == 1) y1 += f[i];
				else y2 += f[i];
			}
			System.out.println(y1 + " " + y2);
		}
	}
	static long	f[]	= new long[30];
	static void s()
	{
		long t = 1;
		int i;
		for (i = 1; i < 21; i++)
		{
			t = t * i;
			f[i] = t;
		}
	}
	
}