- Description
求 N 阶方阵对应的行列式值。
- Input
输入数据包含多组测试案例。每组测试案例由N(0
#include<stdio.h>
#define MAXN 11
#define fabs(x) ((x)>0?(x):-(x))
#define zero(x) (fabs(x)<1e-10)
struct mat{
// int n,m;
int n;
double data[MAXN][MAXN];
};
double det(const mat& a){
int i,j,k,sign=0;
double b[MAXN][MAXN],ret=1,t;
// if (a.n!=a.m)
// return 0;
for (i=0;i<a.n;i++)
for (j=0;j<a.n;j++)
b[i][j]=a.data[i][j];
for (i=0;i<a.n;i++){
if (zero(b[i][i])){
for (j=i+1;j<a.n;j++)
if (!zero(b[j][i]))
break;
if (j==a.n)
return 0;
for (k=i;k<a.n;k++)
t=b[i][k],b[i][k]=b[j][k],b[j][k]=t;
sign++;
}
ret*=b[i][i];
for (k=i+1;k<a.n;k++)
b[i][k]/=b[i][i];
for (j=i+1;j<a.n;j++)
for (k=i+1;k<a.n;k++)
b[j][k]-=b[j][i]*b[i][k];
}
if (sign&1)
ret=-ret;
return ret;
}
int main()
{
mat a;
while(scanf("%d",&a.n)!=EOF)
{
for(int i=0;i<a.n;i++)
for(int j=0;j<a.n;j++)
scanf("%lf",&a.data[i][j]);
double det1;
det1=det(a);
printf("%.2f\n",det1);
}
return 0;
}