About Question enthuware.ocajp.i.v7.-2-.1372 :

Help and support on OCA OCP Java Programmer Certification Questions
1Z0-808, 1Z0-809, 1Z0-815, 1Z0-816, 1Z0-817

Moderator: admin

Post Reply
flex567
Posts: 201
Joined: Mon Apr 02, 2018 8:40 am
Contact:

About Question enthuware.ocajp.i.v7.-2-.1372 :

Post by flex567 »

Aha but it would work for factorial(1000)?

admin
Site Admin
Posts: 9387
Joined: Fri Sep 10, 2010 9:26 pm
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1372 :

Post by admin »

What happened when you tried it out?
If you like our products and services, please help us by posting your review here.

flex567
Posts: 201
Joined: Mon Apr 02, 2018 8:40 am
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1372 :

Post by flex567 »

Code: Select all

public class Temp{

	public static void main(String args[]){
	
	System.out.println(factorial(1000));
	
	}
	
	static int factorial(int n){
	   if(n==1) return 1;
	   else return n*factorial(n-1);
	}
}
I don't get any exception but I do get back 0. Why is that ?

admin
Site Admin
Posts: 9387
Joined: Fri Sep 10, 2010 9:26 pm
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1372 :

Post by admin »

Here are a few pointers - What is the largest number that an int variable can hold? What is the value of factorial(1000)? What happens when you add 1 to an int variable that is already set to the largest value that it can hold?
If you like our products and services, please help us by posting your review here.

flex567
Posts: 201
Joined: Mon Apr 02, 2018 8:40 am
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1372 :

Post by flex567 »

largest number = -2 147 483 648 ...+2 147 483 647
factorial(1000) =
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

>What happens when you add 1 to an int variable that is already set to the largest value that it can hold?
It gets multiplied by zero at somepoint?

flex567
Posts: 201
Joined: Mon Apr 02, 2018 8:40 am
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1372 :

Post by flex567 »

It goes around from start

admin
Site Admin
Posts: 9387
Joined: Fri Sep 10, 2010 9:26 pm
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1372 :

Post by admin »

I hope you got the answer you were looking for. The point is an int variable cannot store a number larger than Integer.MAX_VALUE ( which is nothing but 2^32 - 1). As soon as your factorial value gets larger than this, the variable will overflow. This is not important for the exam though, so I wouldn't spend more time on it.
If you like our products and services, please help us by posting your review here.

flex567
Posts: 201
Joined: Mon Apr 02, 2018 8:40 am
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1372 :

Post by flex567 »

I undersdand that overflow will happen but don't understand why it is 0.
If you increase Integer.MAX_VALUE + 3 overflow happens but it is not 0.

admin
Site Admin
Posts: 9387
Joined: Fri Sep 10, 2010 9:26 pm
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1372 :

Post by admin »

But you are not adding 3 in the program. See this for full detail:
https://docs.oracle.com/javase/specs/jl ... ls-15.17.1
If you like our products and services, please help us by posting your review here.

flex567
Posts: 201
Joined: Mon Apr 02, 2018 8:40 am
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1372 :

Post by flex567 »

I didn't find the reason for 0 in the link you provided. Is it maybe this:
>If the magnitude of the product is too large to represent, we say the operation overflows; the result is then an infinity of appropriate sign.

admin
Site Admin
Posts: 9387
Joined: Fri Sep 10, 2010 9:26 pm
Contact:

Re: About Question enthuware.ocajp.i.v7.-2-.1372 :

Post by admin »

It does overflow and because of overflow the result swings between negative and positive. In one of the steps, the value of the factorial becomes zero. Once factorial becomes zero, next factorial will also be zero.
You may run the program with print statements and see the value of n and factorial at each step.
If you like our products and services, please help us by posting your review here.

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests