生日悖论问题使用C++产生溢出该如何解决

在编写生日悖论程序时,发现C++最多只能计算到7人,当输入参数为8人的时候产生溢出,我现在需要计算100个人中至少有两人的生日相同的概率为多少,请问该怎么解决这个问题。麻烦哪位大神帮忙解决一下。谢谢..
附上C++源码

 #include <iostream>
using namespace std;

//本程序计算生日悖论问题
//注:C++最多只能计算到7人,当输入参数大于7时,产生溢出,计算机无法计算

int main()
{
    double count(int number);
    int m;
    cout << "请输入参数m(人数):" << endl;
    cin >> m;
    cout << m <<"个人中至少两个人的生日相同的概率为:" << count(m);

    system("pause");
    return 0;
}

double count(int number)
{
    double result = 0;
    double NumeratorArrangeresult = 365;   //计算分子365的n次全排列
    double DenominatorPower = 365;               //计算分母365的n次方
    for(int i =1; i<number; i++)
        NumeratorArrangeresult *=  (NumeratorArrangeresult - 1);
    for(int j =1; j<number; j++)
        DenominatorPower *= DenominatorPower;

    result = 1-(NumeratorArrangeresult / DenominatorPower);

    return result;
}

/*数学原理
不计特殊的年月,如闰二月。先计算房间里所有人的生日都不相同的概率,那么 
第一个人的生日是 365选365 
第二个人的生日是 365选364 
第三个人的生日是 365选363 
: 
: 
: 
第n个人的生日是 365选365-(n-1) 
所以所有人生日都不相同的概率是: 
(365/365)× (364/365) ×(363/365) ×(362/365)× ... ×(365-n+1/365) 
即为:An 365/365^n
那么,n个人中有至少两个人生日相同的概率就是: 
1-(365/365)× (364/365) ×(363/365) ×(362/365)× ... ×(365-n+1/365)
*/

因为累乘的结果超过了存储上限导致的,试试这样:
double count(int number)
{
double result = 0;
double temp = 1;
double NumeratorArrangeresult = 365; //计算分子365的n次全排列
double DenominatorPower = 365; //计算分母365的n次方

for(int j =1; j<=number; j++)
{
    temp *= (NumeratorArrangeresult --) / DenominatorPower;

}
result = 1-temp;

return result;

}

这是原来的写法的运行结果图片说明
使用了楼主的方法运行结果图片说明

同样是65的输入,可以被计算出来,并没有产生溢出。