rest - Java - long displays wrong values -


i have create program goes 1 100 , calculates separate product of numbers have division 4 rest 0, 1, 2, 3, have calculate 4 different products.

i tried solving problem in 2 ways both ways display wrong results:

first attempt:

    public class prodmod4 { public static void main(string[] args){     int i, k=0;     long p=1;     while(k<4){         for(i=1;i<=100;i++){             if(i%4==k){             p=p*i;             }         }         system.out.printf("produsul numerelor care au restul %d este: %d\n", k, p);         i=1;         p=1;         k++;     } } } 

when run program gives me:

the product of numbers rest 0 0, rest 1 -6661643765781265135, rest 2 -2885954222765899776, rest 3 -9150527387120197261

second attempt:

public class prodmod4v2 { public static void main(string[] args){     int i;     long zero=1, unu=1, doi=1, trei=1;     for(i=1;i<=100;i++){         switch(i%4){         case 0:             zero=zero*i;             break;         case 1:             unu=unu*i;             break;         case 2:             doi=doi*i;             break;         case 3:             trei=trei*i;             break;         default:             break;         }     }     system.out.printf("produsul numerelor care au resturile 0,1,2,3 sunt:\n zero:%d\n unu:%d\n doi:%d\n trei:%d\n", zero, unu, doi, trei); } } 

when run have same output in first attempt.

thank in advance!

your numbers big mere long, supports numbers 2^63 - 1. when happens, result said overflow - means results not you'd expect them be. solve this, must use supports larger numbers, biginteger or bigdecimal.


Comments