#include <iostream>
float a[] = {
84,45,15,85,845,
45,26,65,32,541,
45,30,32,55,512,
23,21,15,12,326,
51,23,54,88,15,
};
void test(float* arr,int start,int order)
{
float* vir = new float[order - 1 - start];
for (int i = 1 + start; i < order; i++) vir[i - 1 - start] = -(arr[i * order + start] / arr[(0 + start) * order + start]);
for (int i = 1 + start; i < order; i++)
{
for (int j = 0 + start; j < order; j++) arr[i * order + j] += arr[(0 + start) * order + j] * vir[i - 1 - start];
}
if ((order - start) != 2)
{
start++;
test(arr, start, order);
}
}
float computeDet(float* arr,int order)
{
test(a, 0, order);
float t = 1;
for (int i = 0; i < order; i++)
{
for (int j = 0; j < order; j++)
{
if (i == j) t *= a[i * order + j];
}
}
return t;
}
int main()
{
std::cout << computeDet(a, 5) << std::endl;
return 0;
}
变量及含义:
arr 一维数组的指针,可以是任意可计算的类型
start 可以理解为开始三角形法的行数
order 行列式的阶数
vir 是一个数组,我不知道怎么形容,但是它实际上就是一个可以让其他行第一列数为零的比值数组