Duang~Duang 2021-03-14 15:35 采纳率: 50%
浏览 24

c++ 编写组合算法中的问题

/// <summary>
	/// 组合
	/// </summary>
	/// <param name="i">需要挑选几个</param>
	/// <param name="n">总数</param>
	/// <returns>组合的值</returns>
	int combination(int i, int n) {

		cout << "n: " << i << ",m: " << n << endl; //这里的n其实是i,m是n

		//double res 会出现精度的问题
		long long res = 1;
		int k = i;	//控制轮数

		cout << "res: ";

		while (k >= 1 && i >= 1)
		{
			//int flag = 0;
            //比较是否能够除尽
			while ((((double)(res * (n + 0.0f) / i) - (res * n / i)) != 0) && k >= 1)
			{
				res *= n;
				n--;
				k--;
				cout << res << " ";
			}


			if (k < 1)
			{
				cout << "k: " << k << endl;
				break;
			}
			res = res * n / i;
			n--;
			i--;
			k--;
			cout << res << " ";
		}

		while (i >= 1) {
			res /= i--;
		}

		cout << endl;
		return res;
	}

因为这里会涉及到int越界与double不够精确的问题,所以我就直接使用long long res来充当返回值了

我输入的的i = 13,n = 22

圈红那边其实是53721360 * 16 = 859,541,760。

就很莫名其妙,都没有超过int的范围,我定义的res是long long 的

 

 

别人网站上的n = 50 , m = 100 都可以算的出来,这种算法应该怎么写

  • 写回答

1条回答 默认 最新

  • 爱编程的小芒果 2023-07-13 16:34
    关注

    如果数字太大的话,可以用高精度,如果不会可以看看博客。
    我还是一名小学生,希望能被采纳,谢谢!

    评论

报告相同问题?

悬赏问题

  • ¥15 图像超分real-esrgan网络自己训练模型遇到问题
  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路
  • ¥15 内网办公电脑进行向日葵