I finally solved the Birthday Problem using Java
Can be done without BigDecimals and factorials

You can compute the chance of shared birthdays using a simpler method, which avoids big numbers and factorials.  With one person, the chance of all people having different birthdays is 100% (obviously).  If you add a second person, that person has a 364/365 chance of also having a distinct birthday.  When you add a third person, that person has a 363/365 chance of having a birthday distinct from the previous two.  So as you keep adding more people, you keep track of the total chance of everyone having a distinct birthday by multiplying your current chance by (365-i)/365 for each new person.

Here is how you could do this in java:

import java.util.Scanner;

public class Testing {
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);

        System.out.print("Enter Number of Students: ");
        int num = sc.nextInt();

        double notSameChance = 1.0;
        for (int i = 0; i &lt; num; i++)
            notSameChance *= (365-i) / 365.0;

        System.out.printf("\nNot Same Birthday chance: %.0f%%\n",
                (notSameChance * 100) );
        System.out.printf("Same Birthday chance: %.0f%%\n",
                ((1 - notSameChance) * 100)  );
    }
}


Factorial function was strange

Looking at your factorial function, it does an addition and a multiplication on every loop.  Although it appears to work, you could make it simpler by doing just the multiplication, like this:

public static BigDecimal fact(int num)
{
    BigDecimal abd = new BigDecimal("1");

    for (int i=2; i&lt;=num; i++) {
        abd = abd.multiply(BigDecimal.valueOf(i));
    }
    return abd;
}