《c++程序设计原理与实践》第六章习题10

#include "../std_lib_facilitie.h"
//------------------------------------------------------------------------
//计算排列组合

int main()
try
{
	cout << "请输入两个数字,并输入想要的计算方式代号(排列P/组合Q): ";
	int a, b;
	char n;//用来判断计算方式
	cin >> a >> b>>n;
	if (a < b||b<0)error("Bad input.");//a和b的范围
	double a_facotrial=a,a_b_factorial=a-b;
	for (int i = a - 1; i >= 1; i--)//计算a!
		a_facotrial = a_facotrial * i;
	for (int i = a - b - 1; i >= 1; i--)//计算(a-b)!
	{
		if (a - b == 0)a_b_factorial = 1;
		else a_b_factorial = a_b_factorial * i;
	}
	double p = a_facotrial / a_b_factorial;
	if (n != 'P' && n != 'Q')error("请求的计算方式有误");
	if (n == 'P')cout << a << "和" << b << "的排列是" << p<<'\n';//如果计算方式是排列,则直接输出答案
	if (n == 'Q') {//如果计算方式是组合,则继续计算
		int b_factorial=b;
		for (int i = b - 1; i >= 1; i--)//计算b!
		{
			if (b == 0)b_factorial = 1;
			else b_factorial = b_factorial * i;
		}
		double c = p / b_factorial;//计算组合
		cout << a << "和" << b << "的组合是" << c<<'\n';//输出通过组合计算出的答案
	}
	keep_window_open();
}
catch (exception& e) {
	cerr << "error: " << e.what() << '\n';
	keep_window_open();
	return 1;
}
catch (...) {
	cerr << "Oops: unknown exception!\n";
	keep_window_open();
	return 2;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值