[英]multiply two negative numbers in c++
when I tried to multiple two negative numbers the value it is zero in c++, for example -5 * -3 the result is zero, why?当我尝试将两个负数相乘时,c++ 中的值为零,例如 -5 * -3 结果为零,为什么? this is my code
这是我的代码
#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;
}
how to fix it to get the correct result?如何修复它以获得正确的结果? the input is
输入是
2 2 -3 2 -3 2 -4 2 2 -3 2 -3 2 -4
Your issue is here:你的问题在这里:
for (int k = 0; k < 3; k++)
o_arr[i] += v_arr[k] * m_arr[k][i];
}
You access elements at indices 0
, 1
and 2
in v_arr
, but it only has 2 elements.您可以访问
v_arr
中索引0
和1
处的元素,但它只有2
个元素。 That's Undefined Behaviour.那是未定义的行为。
Assuming this is matrix*vector multiplication code, it should look like this (untested):假设这是矩阵*向量乘法代码,它应该看起来像这样(未经测试):
for (int k = 0; k < 3; k++)
o_arr[k] += v_arr[i] * m_arr[i][k];
}
Also, your loop based on j
is useless.此外,基于
j
的循环是无用的。 You can remove it:您可以删除它:
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.