1586 - 阶乘
时间限制 : 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; } } }