簡體   English   中英

將 c++ 中的兩個負數相乘

[英]multiply two negative numbers in c++

當我嘗試將兩個負數相乘時,c++ 中的值為零,例如 -5 * -3 結果為零,為什么? 這是我的代碼

  #include <bits/stdc++.h>
      #include <iostream>

   using namespace std;
     void Multiply(const int v_arr[], const int m_arr[][3], int signed 
  o_arr[], int size)

{

for (int i = 0; i < size; i++) {
    for (int j = 0; j < size; j++) {
        o_arr[i] = 0;
        for (int k = 0; k < 3; k++)
            o_arr[i] += v_arr[k] * m_arr[k][i];
    }
}

//End your code here
    }
    int main()
     {
  int n;
   cin >> n;
int v_array[n];
int m_array[n][3];
int signed o_array[3];
for (int i = 0; i < n; i++) {
    cin >> v_array[i];
}

for (int i = 0; i < n; i++) {
    for (int j = 0; j < 3; j++) {
        cin >> m_array[i][j];
    }
}

      //fuction
Multiply(v_array, m_array, o_array, n);
for (int j = 0; j < 3; j++) {
    cout << o_array[j] << " ";
   }
     return 0;
  }

如何修復它以獲得正確的結果? 輸入是

2 2 -3 2 -3 2 -4

你的問題在這里:

for (int k = 0; k < 3; k++)
    o_arr[i] += v_arr[k] * m_arr[k][i];
}

您可以訪問v_arr中索引01處的元素,但它只有2個元素。 那是未定義的行為。

假設這是矩陣*向量乘法代碼,它應該看起來像這樣(未經測試):

for (int k = 0; k < 3; k++)
    o_arr[k] += v_arr[i] * m_arr[i][k];
}

此外,基於j的循環是無用的。 您可以刪除它:

void Multiply(const int v_arr[], const int m_arr[][3], int signed o_arr[], int size)
{
    for(int k = 0; k < 3; k++) { //initialize output array
        o_arr[k] = 0;
    }
    for (int i = 0; i < size; i++) {
        for (int k = 0; k < 3; k++)
            o_arr[k] += v_arr[i] * m_arr[i][k];
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM