L
lebaz95
I would like to create a program that will do problems like (xa+yb)^z. But I would need to do things like (5!/3!(5-3)!) How would I get this done?
I would like to create a program that will do problems like (xa+yb)^z. But I would need to do things like (5!/3!(5-3)!) How would I get this done?
rslt = 1; for(i = e; i > 0; i --) { rslt *= i; }
I asked my brother and he helped me. e in this program is a user
input so you may replace it as you see fit.
rslt = 1;
for(i = e; i > 0; i --)
{
rslt *= i;
}
I asked my brother and he helped me. e in this program is a user input so you may replace it as you see fit.
A warning: If `e' is greater than 12, this calculation will
produce values too large for an `int':
479001600 = 12!
2147483647 = Integer.MAX_VALUE
6227020800 = 13!
You can go somewhat higher by making `rslt' a `long':
2432902008176640000 = 20!
9223372036854775807 = Long.MAX_VALUE
51090942171709440000 = 21!
... but for anything over 20 even `long' will not suffice. You
should make sure `e' is 20 or smaller (12 or smaller for `int'),
or take a look at the BigInteger class.
Or, since you are dividing by factorials, you can factor them out to
start with.
5!/3!(5-3)! =
5*4*3*2*1/(3*2*1)(2*1) =
(5*4)/(2*1) * (3*2*1)/(3*2*1) =
5*4/2
The general formula being n!/r!(n-r)!
I believe it is possible to keep the results in the range of integers,
if the final result is.
In the real world, people call this a factorial. Here's a fun article
on the subject:
<http://chaosinmotion.com/blog/?p=622>
I would like to create a program that will do problems like
(xa+yb)^z. But I would need to do things like (5!/3!(5-3)!) How would
I get this done?
why would we multiply first? 16 and 15 are coprime, so we can divideOne good way to arrange this is
n / 1 * (n-1) / 2 * (n-3) / 3 * ... * (n-r+1) / r
It's easy to see that all the divisions have remainder zero.
Let's see: After "times (n-k+1) divided by k" we've calculated
C(n,k). The next product is C(n,k)*(n-k) before dividing by
(k+1) knocks it back down, so it looks like the product could be
somewhat larger than the eventual result, maybe too large. Hmm:
If we try to calculate C(30,15) this way, we'll get as far as
C(30,14) = 145422675
and then multiply by 16
C(30,14)*16 = 2326762800 > Integer.MAX_VALUE
and then divide by 15
C(30,14)*16/15 = C(30,15) = 155117520 < Integer.MAX_VALUE
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.