nyoj 65-另一种阶乘问题 (Java 高精度)

本文介绍了一种特殊的阶乘概念,即将不大于n的所有奇数相乘,并求出1!!到n!!的累加和。提供了Java代码实现,适用于n小于等于20的情况。

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 }

 

转载于:https://www.cnblogs.com/GetcharZp/p/9110659.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值