65-另一种阶乘问题
内存限制:64MB
时间限制:3000ms
特判: No
通过数:16
提交数:18
难度:1
题目描述:
大家都知道阶乘这个概念,举个简单的例子:5!=1*2*3*4*5.现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘例如:5!!=1*3*5.现在明白现在这种阶乘的意思了吧!
现在你的任务是求出1!!+2!!......+n!!的正确值(n<=20)
输入描述:
第一行输入一个a(a<=20),代表共有a组测试数据 接下来a行各行输入一个n.
输出描述:
各行输出结果一个整数R表示1!!+2!!......+n!!的正确值
样例输入:
2 3 5
样例输出:
5 23
分析:
1、阶乘公式的变形,因为数据比较小不用高精度也可以解决问题
核心代码:
1 int a = scan.nextInt(); 2 ans = BigInteger.ZERO; 3 for(int i = 1; i <= a; ++ i) { 4 temp = BigInteger.ONE; 5 for(int j = 1; j <= i; j += 2) { 6 temp = temp.multiply(BigInteger.valueOd(j)); 7 } 8 ans = ans.add(temp); 9 } 10 Systemp.out.println(ans);
java代码实现(AC):
1 import java.util.*; 2 import java.io.*; 3 import java.math.*; 4 5 public class Main { 6 public static void main(String args[]) { 7 Scanner scan = new Scanner(System.in); 8 BigInteger ans ,temp; 9 int t = scan.nextInt(); 10 while (t > 0) { 11 t--; 12 int a = scan.nextInt(); 13 ans = BigInteger.ZERO; 14 for(int i = 1; i <= a; ++ i){ 15 temp = BigInteger.ONE; 16 for(int j = 1; j <= i; j += 2){ 17 temp = temp.multiply(BigInteger.valueOf(j)); 18 } 19 ans = ans.add(temp); 20 } 21 System.out.println(ans); 22 } 23 } 24 }