首页 > 试题广场 >

阶乘

[编程题]阶乘
  • 热度指数:22722 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是小于等于n的最大偶数)。

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


输出描述:
可能有多组测试数据,对于每组数据,
输出题目要求的y1和y2
示例1

输入

4

输出

7 26
import java.math.BigInteger;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()) {
			int n = scanner.nextInt();
			int m = 0;
			int p = 0;
			if (n % 2 == 0) {
				m = n-1;
				p = n;
			}else {
				m = n;
				p = n-1;
			}
			
			BigInteger y1 = BigInteger.ZERO;
			BigInteger y2 = BigInteger.ZERO;
			
			for (int i = 1; i <= m; i++) {
				if (i % 2 != 0) {
					y1 = y1.add(factorial(i));
				}
			}
			
			for (int i = 2; i <= p; i++) {
				if (i % 2 == 0) {
					y2 = y2.add(factorial(i));
				}
			}
			
			System.out.println(y1.toString()+" "+y2.toString());
			
		}
	}
	
	public static BigInteger factorial(int n) {
		if (n == 0 || n == 1) {
			return BigInteger.ONE;
		}
		return factorial(n-1).multiply(BigInteger.valueOf(n));
	}
}

发表于 2024-03-26 21:40:00 回复(0)
Java 解法
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int y1 = 0;
        int y2 = 0;
        int j = 1;
        for (int i = 1; i <= n; i++) {
            j *= i;
            if (i % 2 == 0) y2 += j;
            else y1 += j;
        }
        System.out.println(y1 + " " + y2);
    }
}


编辑于 2020-03-17 17:36:04 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            long n = sc.nextInt();
            long sum1=0;
            long sum2=0;
            for(long i=1;i<=n;i+=2){
                sum1+=mul(i);
            }
            for(long i=2;i<=n;i+=2){
                sum2+=mul(i);
            }
            System.out.print(sum1+" "+sum2);
        }
    }
    public static long mul(long x){
        long m = 1;
        for(long i=1;i<=x;i++){
            m = m*i;
        }
        return m;
    }
}

发表于 2018-08-05 21:03:09 回复(0)
import java.util.Scanner;

public class Main {

@SuppressWarnings("resource")
public static void main(String[] args) {

Scanner in = new Scanner(System.in);
int nextInt = in.nextInt();
int sumJi = 0;
int sumOu = 0;
for (int i = 1; i <= nextInt; i++) {
if (i % 2 == 0) {
sumOu += getJiecheng(i);
} else {
sumJi += getJiecheng(i);
}
}
System.out.println(sumJi + " " + sumOu);
}

public static int getJiecheng(int n) {
if (n == 1) {
return 1;
} else {
return getJiecheng(n - 1) * n;
}
}

}


import java.util.Scanner;

public class Main {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int nextInt = in.nextInt();
		int jiShu = 0;
		int ouShu = 0;
		for (int i = 1; i <= nextInt; i++) {
			if (i % 2 != 0) {
				jiShu += jieCheng(i);
			} else {
				ouShu += jieCheng(i);
			}
		}
		System.out.println(jiShu + " " + ouShu);
	}

	public static int jieCheng(int n) {
		if (n == 1) {
			return 1;
		} else {
			return jieCheng(n - 1) * n;
		}
	}
}


编辑于 2017-06-30 22:10:51 回复(0)
import java.util.Scanner;

/**
 * m是小于等于n的最大奇数
 * p是小于等于n的最大偶
    * 由题可想出直接用循环从i到N,如果i能整除2就是偶数既小于等于N的偶数
 */
public class Main {

public static void main(String[] args) {
int res ,resd;
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
res=resd=0;
int n = sc.nextInt();
for(int i=1;i<=n;i++){
if(i%2==0){
res += jieceng(i);
}else{
resd +=jieceng(i);
}
}
System.out.println(resd+" "+ res);
}
}

public static int jieceng(int num){
int totle=1;
for(int i=1;i<=num;i++){
totle *=i; 
}
return totle;
}
   }

发表于 2017-06-05 09:51:16 回复(0)


import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int y1=0,y2=0,m=0,p=0,odd=1,even=1;
if(n%2==0){
m=n-1;
p=n;
}else{
m=n;
p=n-1;
}
for(int i=1;i<=m;i++){
odd=odd*i;
if(i%2!=0){
y1=y1+odd;
}
}
for(int i=2;i<=p;i++){
even=even*i;
if(i%2==0){
y2=y2+even;
}
}
System.out.println(y1+" "+y2);
}
}
发表于 2017-05-30 18:30:06 回复(0)
import java.util.Scanner;
public class Main {
	public static int mul(int n) {
		if (n > 0) {
			return n * mul(n - 1);
		}
		else {
			return 1;
		}
	}
	public static int add(int n) {
		int sum = 0;
		while (n > 0) {
			sum += mul(n);
			n = n - 2;
		}
		return sum;
	}
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int y1 = 0, y2 = 0;
		while (in.hasNext()) {
			int n = in.nextInt();
			if (n % 2 == 0) {
				y1 = add(n - 1);
				y2 = add(n);
			}
			else {
				y1 = add(n);
				y2 = add(n - 1);
			}
			System.out.println(y1+" "+y2);
		}
	}
}

发表于 2017-04-22 16:19:34 回复(0)
import java.util.Scanner;
public class Main{

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
if(n%2==0){
System.out.println(f2(n-1)+" "+f2(n));
}else{
System.out.println(f2(n)+" "+f2(n-1));
}
}
}
public static int f1(int n){
if(n>0){
return n*f1(n-1);
}else{
return 1;
}
}
public static int f2(int n){
int res=0;
while(n>0){
res+=f1(n);
n-=2;
}
return res;
}
发表于 2017-04-18 12:24:43 回复(0)
package h;
import java.util.*;
public class solution
{
 public static void main(String []args)
 {
   Scanner in=new Scanner(System.in);
   long sum=0;
   long doublesum=0;
  
  while(in.hasNext())
  {
   int num=in.nextInt();
   long ousum[]=new long[num+1];
   ousum[0]=0;
      sum=getsum(num,ousum);
      doublesum=getdoublesum(num,ousum);
   System.out.print(sum-doublesum);
   System.out.print(" ");
   System.out.println(doublesum);
  }
  in.close();
  
  
  
 }
 private static long getdoublesum(int num, long[] ousum)
 {
  long sum = 0;
  if(num%2==0)
  {
   for(int i=0;i<=num;)
   {
    sum+=ousum[i];
    i=i+2;
   }
   return sum;
  }
  else
  {
   for(int i=0;i<=num-1;)
   {
    sum+=ousum[i];
    i=i+2;
   }
   return sum;
   
  }
 
 }
 private static long getsum(int num,long[]nums) {
  // TODO Auto-generated method stub
  long sum = 0;
  int mul = 1;
  for(int i=1;i<=num;i++)
  {
      
       mul=mul*i;
       nums[i]=mul;
      /*for (int j = i; j >= 1; j--)
      {
       mul *= j;
      }*/
      sum += mul;
  }
  return sum;
 }
 
 
 
 

}
发表于 2017-04-12 23:17:28 回复(0)
import java.util.Scanner;

import javax.print.DocFlavor.INPUT_STREAM;

public class TestP_4 {
static long fact(int n){
if(n<=1){
return 1;
}else{
return n*fact(n-1);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int i,y1=0,y2=0;
System.out.printf("输入一个整数\n");
Scanner scanner=new Scanner(System.in);
while (true) {
int n=scanner.nextInt();
        for (i=1;i<=n;i=i+2) 
        {  
y2+=fact(i);
System.out.println(y2);
}
        for (i=2;i<=n;i=i+2) {
y1+=fact(i);
System.out.println(y1);
        } 
        System.out.println(y2+" "+y1);
}
}
}

本题:就是递归+for循环基本使用方式
发表于 2017-04-09 16:42:04 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        int n;
        int y1=0;
        int y2=0;
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            n=sc.nextInt();
            for(int i=1;2*i-1<=n;i++){
                int sum=1;
                for(int j=1;j<=2*i-1;j++)
                    sum*=j;
                y1+=sum;
            }
            for(int t=1;2*t<=n;t++){
                int sum=1;
                for(int s=1;s<=2*t;s++)
                    sum*=s;
                y2+=sum;
            }
            System.out.println(y1+" "+y2);
            y1=0;
            y2=0;
        }
    }
}
这种思路的话一定要记得每次输入计算完成后将Y1和Y2清零,不然下次输入计算时会在上次的基础上累加,我就是在这里被坑了好久.....
发表于 2017-03-21 11:28:04 回复(0)
package niuke.com;
import java.util.Scanner;
/*
 * 迭代:输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是小于等于n的最大偶数)。
 */
public class Factorical{
public static void main(String[] args) {
int total1=0;
int total2=0;
while(true){
Scanner can = new Scanner(System.in);
int n = can.nextInt();
for(int i=1;i<=n;i=i+2){
int sum1 = 1;
for(int p = 1;p<=i;p++){
sum1 = sum1*p;
}
total1 =total1+sum1;
}
System.out.print(total1);
for(int j=2;j<=n;j=j+2){
int sum2=1;
for(int q= 1;q<=j;q++){
sum2 = sum2*q;
}
total2 = total2+sum2;
}
System.out.println(" "+total2);
}
}
}
发表于 2017-03-13 14:47:32 回复(0)
import java.util.Scanner;
/*
*    功能:输入整数,输出奇数和偶数的阶乘和(小于等于输入的数)
*/
public class Main{
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int inputNumber;
        while(sc.hasNext()){
            //获得输入的整数
            inputNumber = sc.nextInt();
           
            int i = 1;
            int y1 = 0;    //奇数阶乘和
            int y2 = 0;    //偶数阶乘和
            int lastNumMul = 1;    //用于循环的那个数(i)的上一个数的阶乘
            while(i <= inputNumber){
                lastNumMul = lastNumMul * i;
                if(i % 2 != 0){	//奇数
                    y1 += lastNumMul;
                } else {
                    y2 += lastNumMul;
                }
                i++;
            }
            System.out.println(y1 + " " + y2);
        }
    }
}

发表于 2017-03-10 16:41:03 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
        int n=sc.nextInt();
        int sum,num=0;
        for(int i=1;i<=n;i+=2){
sum=1;
           for(int j=1;j<=i;j++){
               sum*=j;
           }
num+=sum;
        }
System.out.print(num+" ");
num=0;
            for(int i=2;i<=n;i+=2){
sum=1;
                for(int j=1;j<=i;j++){
                    sum*=j;
                }
num+=sum;
            }
            System.out.println(num);
        }
    }
}
发表于 2017-03-08 21:29:57 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    
    public static void main(String[] args) throws NumberFormatException, IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = null;
        Main m = new Main();
        while ((line = br.readLine()) != null) {
            int number = Integer.parseInt(line);
            m.factorial(number);
        }
    }
    
    public void factorial(int n){
    	int temp,sum1,sum2;
    	temp = 1;
    	sum1 = 0;
    	sum2 = 0;
    	for(int i = 1; i <= n; i++){
    		temp *= i;
    		if(i % 2 == 1){
    			sum1 += temp; 
    		}else{
    			sum2 += temp;
    		}
    	}
    	System.out.println(sum1 + " " + sum2);
    }
    
}

发表于 2017-03-05 15:20:20 回复(3)
//这个输入说好的是一个数,结果必须要用while(scanner.hasNext())这个循环才能正确通过,真是坑爹
//这个偶数情况可以不需要进行单独循环,因为偶数是奇数对应的数多乘一位,则直接进行一次循环就行
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNext()){
        int num= scanner.nextInt();
        CaculateY(num);
        }
    }
    public static void CaculateY(int num){
        int y1=0;
        int y2=0;
        int jiechengNum=0;
        boolean isOshu=num%2==0?true:false;
        for(int i=1;i<=num;i=i+2){
            jiechengNum=Jiecheng(i);
            y1=y1+jiechengNum;
            y2=y2+jiechengNum*(i+1);
        }
        if(!isOshu) y2=y2-jiechengNum*(num+1);
        System.out.println(y1+" "+y2);
    }
    public static int Jiecheng(int num){
        if(num==0) return 1;
        if(num==1) return 1;
        return num*Jiecheng(num-1);
    }
}

发表于 2017-03-02 16:55:32 回复(0)
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

while(input.hasNextInt()) {
int x = input.nextInt();
int y1 = 0, y2 = 0;
int z1 = 2, z2 = 1;
for(int i = 0; i < x / 2; i++) { //偶数
y1 += cal(z1);
z1 += 2;
}
for(int i = 0; i < x / 2 + x % 2; i++) { //奇数
y2 += cal(z2);
z2 += 2;
}
System.out.println(y2 + " " + y1);
}
}
/**
* 阶乘
* @param x
* @return
*/
public static int cal(int x) {
if(x <= 1) {
return 1;
} else {
return x * cal(x - 1);
}
}
}
编辑于 2017-01-04 15:44:49 回复(0)

问题信息

难度:
19条回答 22767浏览

热门推荐

通过挑战的用户

查看代码