如果你WA#1,那么大概率......
查看原帖
如果你WA#1,那么大概率......
1186230
liwenliwenllll楼主2024/7/21 23:44

如果WA#1,大概率是你先进行了除法后进行if的判断,而除法有可能会除以0导致浮点错误

错误版本(除以a[i][i],此时a[i][i]是0):


//否则继续讨论答案:从后往前遍历,将当前行除以a[i][i]即将主元置1 
for(int j = n + 1; j >= i; j--) a[i][j] /= a[i][i]; 

//如果当前主元提前被置为0,则无解或有无数解,直接返回即可(要先写,如果先除的话除以0会出现浮点错误)
if(fabs(a[i][i]) < eps)
{
	cout<<"No Solution";
	return 0;
}

正确版本:

//如果当前主元提前被置为0,则无解或有无数解,直接返回即可(要先写,如果先除的话除以0会出现浮点错误)
if(fabs(a[i][i]) < eps)
{
	cout<<"No Solution";
	return 0;
}
//否则继续讨论答案:从后往前遍历,将当前行除以a[i][i]即将主元置1 
for(int j = n + 1; j >= i; j--) a[i][j] /= a[i][i]; 
2024/7/21 23:44
加载中...