Files
2023-09-28 20:24:18 +08:00

46 lines
1.3 KiB
C#

using System;
using System.Numerics;
namespace MinesweeperSolver {
public class Combination {
public static BigInteger Calculate(int mines, int squares) {
long start = DateTime.Now.Ticks;
BigInteger top = 1;
BigInteger bot = 1;
var range = Math.Min(mines, squares - mines);
// calculate the combination.
for (int i = 0; i < range; i++) {
top = top * (squares - i);
bot = bot * (i + 1);
}
BigInteger result = top / bot;
//SolverMain.Write(squares + " pick " + mines + " in " + result + " ways");
//SolverMain.Write("Combination duration " + (DateTime.Now.Ticks - start) + " ticks");
return result;
}
private static readonly BigInteger[] power10n = { BigInteger.One, new BigInteger(10), new BigInteger(100), new BigInteger(1000), new BigInteger(10000), new BigInteger(100000), new BigInteger(1000000) };
private static readonly int[] power10 = { 1, 10, 100, 1000, 10000, 100000, 1000000 };
public static double DivideBigIntegerToDouble(BigInteger numerator, BigInteger denominator, int dp) {
var work = numerator * power10n[dp] / denominator;
var result = (double) work / power10[dp];
return result;
}
}
}