Posted on 2010-05-23 18:09
千张 阅读(2377)
评论(3) 编辑 收藏 引用 所属分类:
程序员笔试宝典
题目:实现两个N*N矩阵的乘法,矩阵由一维数组表示。
答案:
#include <iostream>
using namespace std;
#define SIZE 2
int* multi(int* array_a,int* array_b,int N)
{
int* array_c = (int*)malloc(N*N);
int temp;
for (int i = 0; i < N; ++ i)
for(int j = 0; j < N; ++ j)
{
temp = i * N + j;
*(array_c + temp) = 0;
for (int k = 0; k < N; ++ k)
{
*(array_c + temp) += array_a[i * N + k] * array_b[k * N + j];
}
cout << *(array_c + temp) << " ";
}
return array_c;
}
int main()
{
int array_a[SIZE * SIZE] = {1,2,1,2};
int array_b[SIZE * SIZE] = {2,1,2,1};
int* array_c = multi(array_a,array_b,SIZE);
free(array_c);
return 0;
}
注意:malloc或new分配内存后,要用free或delete释放内存,要不然可能有“_CrtIsValidHeapPointer异常”,也会有内存泄露。
From:http://hi.baidu.com/feigudian/blog/item/ac608c013c81d0d5277fb5ee.html