千张笔记

Email:rain_qian830@163.com
posts - 28, comments - 42, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

【转】实现两个N*N矩阵的乘法

Posted on 2010-05-23 18:09 千张 阅读(2373) 评论(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

Feedback

# re: 【转】实现两个N*N矩阵的乘法  回复  更多评论   

2010-08-07 17:25 by 游客
这个程序运行时还是有一个bug,应该是malloc和free的问题

# re: 【转】实现两个N*N矩阵的乘法  回复  更多评论   

2010-08-07 17:28 by 游客
我认为,在multi和main中的array_c不是一个

# re: 【转】实现两个N*N矩阵的乘法  回复  更多评论   

2011-10-03 20:14 by fuhuaqing
malloc大小弄错了,应该是arr_c = (int *)malloc(N*N*sizeof(int));
分配大小不够。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理