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 都可以算的出来,这种算法应该怎么写

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