任意阶数相同的两矩阵相加与相乘

~直接放代码 便于自己以后查看(我写的可能有点冗余,但基本思路和想法很简单)~

7-18 矩阵相乘修改(是我想复杂了)

 

//两矩阵相乘代码核心部分更改
int [][] c = new int [N][N];
		
for(int i=0 ; i<N ; i++) {
    for(int j=0 ; j<N ; j++) {
	for(int k=0 ; k<N ; k++) {
            c[i][j] += a[i][k]*b[k][j];
		}
	}
}

 


//n阶矩阵的加乘
#include <iostream>

using namespace std;

//A+B
void ApB(int **arrA,int **arrB,int N){
    int **mid = new int *[N];

    for(int i=0 ; i<N ; i++){
        mid[i] = new int [N];
    }

    for(int i=0 ; i<N ; i++){
        for(int j=0 ; j<N ; j++){
            mid[i][j] = arrA[i][j]+arrB[i][j];
            cout<<"\t"<<mid[i][j];
        }
        if((i+1)%N != 0)cout<<endl;
    }

    for(int i=0 ; i<N ; i++){
        delete []mid[i];
    }
    delete []mid;
}

//A*B
void AcB(int **arrA,int **arrB,int N){
    int **mid = new int *[N];
    int sum = 0;
    int cou = 0;

    for(int i=0 ; i<N ; i++){
        mid[i] = new int [N];
    }

    for(int i=0 ; i<N ; i++){
        int t=0;
        sum = 0;
        for(int j=0 ; j<N ; j++){
            sum += arrA[i][j]*arrB[j][t];
            if(t!=N&&j == N-1){
                j = -1;
                mid[i][t] = sum;
                t++;
                sum = 0;
            }//难点
        }
    }
    for(int i=0 ; i<N ; i++){
        for(int j=0 ; j<N ; j++){
            cout<<"\t"<<mid[i][j];
        }
        if((i+1)%N != 0)cout<<endl;
    }


    for(int i=0 ; i<N ; i++){
        delete []mid[i];
    }
    delete []mid;
}

int main(){
    int N;

    while(cin>>N&&!cin.eof()){
        int **arrA = new int *[N];
        int **arrB = new int *[N+1];

        for(int i=0 ; i<N ; i++){
            arrA[i] = new int [N];
            arrB[i] = new int [N+1];
        }

        cout<<"A矩阵: "<<endl;
        for(int i=0 ; i<N ; i++){
            for(int j=0 ; j<N ; j++){
                cin>>arrA[i][j];
            }
        }

        cout<<"B矩阵: "<<endl;
        for(int i=0 ; i<N ; i++){
            for(int j=0 ; j<N ; j++){
                cin>>arrB[i][j];
            }
        }
        cout<<"A+B: "<<endl;
        ApB(arrA,arrB,N);
        cout<<endl;
        cout<<"A*B: "<<endl;
        AcB(arrA,arrB,N);

        for(int i=0 ; i<N ; i++ ){
            delete []arrA[i];
            delete []arrB[i];
        }

        delete []arrA;
        delete []arrB;
    }


    return 0;
}

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值