#include <stdio.h>
int main()
{
int i, T, N, M;
double ans;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &N, &M);
if(N < M) printf("0\n");
else
{
ans = 1;
for(i = 1; i <= M; i++)
ans *= (double)(N - i + 1) / (double)i;
printf("%.0lf\n", ans);
}
}
return 0;
int main()
{
int i, T, N, M;
double ans;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &N, &M);
if(N < M) printf("0\n");
else
{
ans = 1;
for(i = 1; i <= M; i++)
ans *= (double)(N - i + 1) / (double)i;
printf("%.0lf\n", ans);
}
}
return 0;
}
心得:刚开始阶乘分开算,果断溢出。后来遇到问题,为什么ans *= (N - i + 1) / i;和ans = ans * (N - i + 1) / i;不一样,原来是算的顺序不一样,把ans = (ans * (N - i + 1) / i);括起来之后就一样了。不过以后为了以防万一,中间结果还是改成统一double好了。虽然水题,不过还是学到了。