我的代码只会输0,求查
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e6+10,p=1e9+7;
ll fac[maxn],inv[maxn];
int n,m;
ll pow(ll a,ll b) {
ll res=1;
for(; b; b>>=1) {
if(b&1)res=res*a%p;
a=a*a%p;
}
return res;
}
ll C(ll n, ll m) {
if(m>n||m<0)return 0;
return (fac[n]*inv[n-m]%p)*inv[m]%p;
}
ll init(ll N) {
fac[0]=1;
for(int i=1; i<=N; i++)fac[i]=fac[i-1]*i%p;
inv[N]=pow(fac[N],p-2);
for(int i=N-1; i>=0; i--)inv[i]=inv[i+1]*(i+1)%p;
}
int main() {
scanf("%d%d",&n,&m);
init(maxn);
printf("%lld\n",C(n,m));
return 0;
}