掷N个骰子,计算他们的和出现的概率


#include <iostream>
#include <math.h>
using namespace std;
int g_max = 6;
void printProbability(int n)
{
    if(n < 1)
        return;
    int* pProbabilities[2];
    pProbabilities[0] = new int[g_max * n + 1];
    pProbabilities[1] = new int[g_max * n + 1];
    for(int i = 0;i < g_max * n + 1;++i)
    {
        pProbabilities[0][i] = 0;
        pProbabilities[1][i] = 0;
    }
    int flag = 0;
    for(int i = 1;i <= g_max;++i)
        pProbabilities[flag][i] = 1;
    for(int k = 2;k <= n;++k)
    {
        for(int i = 0;i < k;++i)
            pProbabilities[1-flag][i] = 0;
        for(int i = k;i <= g_max * k;++i)
        {
            pProbabilities[1 - flag][i] = 0;
            for(int j = 1;j <= i && j <= g_max;++j)
                pProbabilities[1 - flag][i] += pProbabilities[flag][i - j];
        }
        flag = 1 - flag;
    }

    double s ;
    double total = pow((double)g_max,n);
    for(int i = n;i <= g_max * n;++i)
    {
        double ratio = (double)pProbabilities[flag][i] / total;
        cout << i << " " << ratio << endl;
        s += ratio;
    }
    cout << "P:" << s << endl;
    delete[] pProbabilities[0];
    delete[] pProbabilities[1];
}

int main()
{
    printProbability(3);
    return 0;
}

上面程序是站上某个大老写的,我找不到了,侵权联系我,我马上删。
说明一下,这个程序运行效率很高,但是,当输入值过高,即printProbability的值过大,超多10几,输出值就溢出,导致数据错误,想问一下怎么解决。感谢