问题描述:
给定n,m,任务是计算答案
输入
在第一行,有一个整数T表示测试用例的数量
然后在T行中跟随T个案例
每个case包含一个字符'A'或'C',两个整数分别代表n和m(1<=n,m<=10)
输出
对于每种情况,如果字符是'A',则计算A(m,n),如果字符是'C',则计算C(m,n)
样例输入
2
一个 10 10
C 4 2
样例输出
3628800
6
问题描述:
给定n,m,任务是计算答案
输入
在第一行,有一个整数T表示测试用例的数量
然后在T行中跟随T个案例
每个case包含一个字符'A'或'C',两个整数分别代表n和m(1<=n,m<=10)
输出
对于每种情况,如果字符是'A',则计算A(m,n),如果字符是'C',则计算C(m,n)
样例输入
2
一个 10 10
C 4 2
样例输出
3628800
6
下面的这是代码
#include <stdio.h>
typedef long long ll; // 题目范围其实用不到long long但是还是觉得ll保险
ll A(ll a, ll b); // 计算排列数
ll B(ll a, ll b); // 计算组合数
ll jiecheng(ll n); // 计算阶乘
int main(void)
{
int test;
scanf("%d", &test);
while (test--)
{
char op[2]; // 为了方便读取所以定义了一个字符串
ll n, m;
scanf("%s", op);
scanf("%lld%lld", &n, &m);
if (op[0] == 'A')
printf("%lld\n", A(n, m));
else
printf("%lld\n", B(n, m));
}
return 0;
}
ll A(ll a, ll b)
{
ll ans = 1;
for (ll i = 0; i < b; i++, a--)
ans *= a;
return ans;
}
ll B(ll a, ll b)
{
return jiecheng(a) / (jiecheng(b) * jiecheng(a - b));
}
ll jiecheng(ll n)
{
ll ans = 1;
for (ll i = 1; i <= n; i++)
ans = ans * i;
return ans;
}
运行结果
望采纳,谢谢