I am trying to find the square of a int
. My code looks like below:
long long sqr=0;
int num=77778;
sqr= num*num;
The result should have been 6049417284
But when I check the output it shows 1754449988
.
What is the mistake I am doing?
long long
should be able to store the result but why am I getting a different value?
Intermediate result type is the same as first argument type in this case. So this code puts wrong value into sqr
(because here you have integer overflow). Try this:
long long num = 77778;
long long sqr = num * num;
Another way with casting:
int num = 77778;
long long sqr = (long long) num * num;
To understand it better you can check these lines:
int ia = 1, ib = 2;
double da = 1.0, db = 2.0;
double ic = ia / ib; // c == 0.0, because intermediate result of division is 0
double dc = da / db; // c == 0.5, expected result