给出两个数 n, m。求 和
。
计算公式:
Input
输入数据有多组(数据组数不超过 250),到 EOF 结束。
对于每组数据,输入两个用空格隔开的整数 n, m (0 <= m <= n <= 20) 。
Output
对于每组数据输出一行, 和
。
Example Input
1 1 20 1 20 10
Example Output
1 1 20 20 670442572800 184756
Hint
请注意数据范围,可能需要使用 long long 等 64 位整型。
附代码:
#include<stdio.h>
long long jc(int n){
int i;
long long sum=1;
for(i=1;i<=n;i++)
sum=sum*i;
return sum;
}
int main()
{
int m,n;
while(scanf("%d%d",&n,&m)!=EOF){
printf("%lld %lld\n",jc(n)/jc(n-m),jc(n)/(jc(n-m)*jc(m)));
}
return 0;
}
重点要注意数据范围!其次要了解基本求阶乘的方法!
现普及以下几点求阶乘方法:http://blog.sina.com.cn/s/blog_53181d4701009k4q.html (方法转自gena)