###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 < 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<=num; i++) {
abd = abd.multiply(BigDecimal.valueOf(i));
}
return abd;
}