请问这题这么写为什么会wa

#include<stdio.h>
//a[i][j] i个人 j题 


long long fun(int n,int m)
{
    int res;
    if(m==0)
    return 0;
    else if(n==m)
    return 1;
    else
    return fun(n-1,m-1)+m*fun(n-1,m); 


}

int main()
{

    long long res;
    int m,n;
    while(scanf("%d%d",&n,&m)!=EOF) 
    {
        int i,j;
        long long a[110][110]={1};


        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {

                a[i][j]=a[i-1][j-1]+j*a[i-1][j];

            }
        }
        printf("%lld\n",a[n][m]); 
    }


    return 0;
}

选修一课程的学生人数为 n,4设置了 m 道练习题目 (其中:1 <= m,n <= 100),假定每道题的难度和知识点都是一样的,要求选修本课程的同学利用在线测评系统完成一道题目,同时还要求每道题目至少要被做过一次,问有多少种做题方案?当然也有可能没有一种方案存在。
样例 是4 2 输出7
15 12输出106470

测试数据输入 0 0试试。输出1,应该输出0。
long long 不够存,用double存