[英]Alternating factorial terms using Java
我正在尝试用Java编写一个循环,该循环可以输出具有这种形式的序列的总和... 1! -3! + 5! – 7! + ...最多n个(用户将n表示为正奇数)。 例如,如果用户为n输入5,则该系列应计算1的总和! -3! + 5! (困难的部分)并通过基本的打印语句(简单的部分)向用户显示。 如果用户给出9,则计算得出的总和将为1! -3! + 5! -7! + 9!
为简便起见,假设用户始终在任何时候都输入正奇数。 我只是担心现在尝试使用循环来求和。
我想出的最接近的代码来做到这一点...
int counter = 1;
int prod = 1;
n = console.nextInt();
while (counter <= n)
{
prod = prod * counter;
counter++;
}
System.out.println(prod);
这确实是n !,但是我发现很难按规定执行它。 任何指针都很棒。
在计算阶乘时,请保持到目前为止该系列的运行总计。 每当counter % 4 == 1
,将阶乘添加到运行总计中。 每当counter % 4 == 3
,从运行总计中减去阶乘。
您说“任何指针”-我认为那意味着您不希望我为您编写代码。
更新
这与您的原始代码紧密相关,因此您将尽可能地容易理解。 我已经更改了我需要更改的最低要求,以使它正常工作。
int counter = 1;
long prod = 1;
long total = 0;
n = console.nextInt();
while (counter <= n)
{
prod = prod * counter;
if( counter % 4 == 1 ) {
total += prod;
} else if (counter % 4 == 3) {
total -= prod;
}
counter++;
}
System.out.println(total);
首先,请注意我将prod
更改为long
。 那是因为阶乘变得非常快。 使用BigInteger
甚至会更好,但是我想您还没有了解这些。
现在,有两个条件,何时将prod
添加到总数中,以及何时从总数中减去prod
。 两者都通过检查counter
除以4时的余数来进行工作-换句话说,检查我们要处理的阶乘,并相应地执行正确的操作。
首先,您需要引入一个变量int sum = 0;
存储备用序列的值。
要仅对第二个值求和,应跳过第二个值。 您可以使用模运算来检查它,例如if( counter % 2 == 1 )
。
如果是这样,则可以将prod的当前值加/减到总和。
要获得交替部分,可以使用boolean positive = true;
像这样:
if( positive ) {
sum += prod;
} else {
sum -= prod;
}
positive = !positive;
基于boolean
,可以对prod进行添加或减去。 该值随后更改。
因为阶乘会变得非常大,所以最好使用long
类型的变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.