2015-02-05 106 views
-5

我试图乘以对角线上的所有元素。例如,如果我想查找我可以使用的总和+=,但每当我尝试和使用*=时,它都会返回与正确答案不同的答案。这里是我的代码:C++ * =没有给出正确的答案

std::vector<std::vector<double> > U = 
{ 
    {1, 2, 3}, 
    {4, 5, 6}, 
    {7, 8, 9}, 

}; 

double calculateDet(const std::vector<std::vector<double> > matrix) 
{ 
    double det = 0.0; 

    for(unsigned i = 0; (i < matrix.size()); i++) 
    { 
     for(unsigned j=0; (j < matrix[i].size()); j++) 
     { 
      if(i == j) 
      { 
       det *= matrix[i][j]; 
      } 
     } 
    } 
    return det; 
} 

的计算应​​该是:1*5*6 = 30然而,我得到的答案是0

任何想法?

编辑:

我也曾尝试使用的总和,因此:det += matrix[i][j] * matrix[i][j],但给我更高的价值。

+6

'det'最初是0吗?然后'del * = whatever'会给你0. – gongzhitaao 2015-02-05 13:54:59

+3

你从0开始。0乘以任何东西总是0.你期望什么? – tenfour 2015-02-05 13:55:28

+4

它应该是'1 * 5 * 9 = 45':) – prajmus 2015-02-05 13:56:10

回答

10

在你的代码有

double det = 0.0; 
<...> 
det *= matrix[i][j]; 

如果乘以零东西,你会得到零。您应该使用1来初始化det

+1

另外OP'计算应该是:1 * 5 * 6 = 30'你确定它不应该是'1 * 5 * 9'? – 2015-02-05 13:56:48

+1

初始化它与1,或与第一个值 – LPs 2015-02-05 13:59:32

+0

@LPs Nope - http://ideone.com/GreeLu – Phorce 2015-02-05 14:01:23

相关问题