用C++实现计算的小程序

问题描述:
给定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;
}

运行结果

img


哪些地方理解不了可以在评论区提问!

望采纳,谢谢

要求请描述完整,A(m,n)和C(m,n)是什么?

参考链接 https://blog.csdn.net/baime3559/article/details/101621549

#include <stdio.h>

//计算n的阶乘 
int jc(int n){
    int i,res=1;
    for(i=1;i<=n;i++){
        res=res*i;
    } 
    return res;
}

//计算排列数A(m,n)=n!/m! 
int A(int m,int n){
    return (jc(n)/jc(n-m));    
}

//计算组合数
int C(int m,int n){
    return (jc(n))/(jc(m)*jc(n-m));
} 
int main(){
    int T;
    scanf("%d",&T);
    char ch;
    int n,m;
    while(T--){       
        fflush(stdin);//去除换行符
        scanf("%c%d%d",&ch,&n,&m);
        if(ch=='A'){
            printf("%d\n",A(m,n));
        }else if(ch=='C'){
            printf("%d\n",C(m,n));
        }
    }
}
 



struct DataInfo
{

    char ch;
    int m;
    int n;
};
int A(int n,int m)
{
    int i=0,sum=1;
    for(i=0;i<m;i++)
    {
        sum=sum*n;
        n--;
    }
    return sum;
}
int C(int n,int m)
{
    int i=0,sum=0,sum1=0,sum2=1;
    sum1=A(n,m);
    for(i=1;i<m+1;i++)
        sum2=i*sum2;
    sum=sum1/sum2;
    return sum;
}
int main()
{
    int i=0,num=0,sum=0;
    
    printf("请输入测试数组数量\n");
    scanf("%d",&num);
    struct Datainfo Data[num];
    for(i=0;i<num;i++) scanf("%c %d %d",&Data[i].ch,&Data[i].n,&Data[i].m);
    for(i=0;i<num;i++)
    {
        if(Data[i].n<1 || Data[i].m>10) printf("错误第%d行, n=%d,m=%d",i+1,Data[i].n,Data[i].m )
        else if(Data[i].ch=='A')
        {
            sum=A(Data[i].n,Data[i].m);
            printf("第%d行结果为:%d",i+1,sum);
        }else if(Data[i].ch=='C'){

            sum=C(Data[i].n,Data[i].m);
            printf("第%d行结果为:%d",i+1,sum);
        }else printf("错误,第%d行 case=%c",i+1,Data[i].ch);
    }
    return 0;

}

望采纳