N!
Description
给出两个数 n, m。求
和
。
计算公式:
Input
输入数据有多组(数据组数不超过 250),到 EOF 结束。
对于每组数据,输入两个用空格隔开的整数 n, m (0 <= m <= n <= 20) 。
Output
对于每组数据输出一行,
和
,用空格隔开。
提醒:因为n!和 m! 数据较大,定义数据类型应用 long long int,输出格式%lld
Sample
Input
1 1 5 3 4 3
Output
1 1 60 10 24 4
Hint
请注意数据范围,可能需要使用 long long 等 64 位整型,输出格式%lld
这段属实拉跨了,应该用递归做这道题。就当提供另一种思路了
奇思妙想qwq
#include<iostream>
using namespace std;
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
long long int a,c;
int x=n,y=m,z=n-m;
long long int elem_n=1,elem_nm=1,elem_m=1;//定义三个中间结果的表达式
for(int i=0;i<n;i++)
{
elem_n=elem_n*x;
x--;
}
for(int i=0;i<m;i++)
{
elem_m=elem_m*y;
y--;
}
for(int i=0;i<(n-m);i++)
{
elem_nm=elem_nm*z;
z--;
}
a=elem_n/elem_nm;
c=elem_n/elem_nm/elem_m;
cout<<a<<" "<<c<<endl;
}
return 0;
}