| Author |
what am i doing wrong here?
|
Randall Twede
Ranch Hand
Joined: Oct 21, 2000
Posts: 4092
|
|
euler 76 and 78 are very similar. i thought it would be a piece of cake. just have to use BigInteger instead of int
76
using BigInteger and adding one
this answer is correct
78
this returns 5997, and the System.out.println says 3000000
the correct answer is 55374
i tried changing
System.out.println(ways[j]);
to
System.out.println(ways[j].toString());
but get the same answer
i am guessing
if(ways[j].mod(limit) == BigInteger.ZERO)
is where the problem is, but not sure
|
SCJP
|
 |
Martin Vajsar
Bartender
Joined: Aug 22, 2010
Posts: 2331
|
|
|
I'd say you've nailed it. int is a primitive type and can be compared using ==. BigInteger is an object, for which the == operator compares references. You need to use the equals method instead.
|
 |
Randall Twede
Ranch Hand
Joined: Oct 21, 2000
Posts: 4092
|
|
if(ways[j].mod(limit).equals(BigInteger.ZERO))
hmmm...i thought that would fix it but i get the same answer. i tried this also
if(ways[j].remainder(limit).equals(BigInteger.ZERO))
same result
|
 |
Jayesh A Lalwani
Bartender
Joined: Jan 17, 2008
Posts: 1272
|
|
Can you print out the intermediate values within the loop in both implementations. You might see why it's diverging
Also, I see there is slight differrence in code
In the first version you have
In the next 2 versions you have
|
 |
Randall Twede
Ranch Hand
Joined: Oct 21, 2000
Posts: 4092
|
|
that difference is correct. #76 wants all combinations of 2 numbers that equal 100(up to 99 + 1).
#78 includes the case of all coins in one stack(100)
i might try it using long, but my guess is the number will be too big
|
 |
 |
|
|
subject: what am i doing wrong here?
|
|
|