首页 > 其他分享 >复数 / 矩阵乘法手写库

复数 / 矩阵乘法手写库

时间:2023-01-21 18:44:26浏览次数:39  
标签:tmp const Matrix 复数 ans return 手写 Cp 乘法

template<typename CpType>
struct Cp { // Complex Structure
	CpType a, b;
	Cp() {}
	Cp(CpType _a, CpType _b) {a  = _a, b = _b; }
	Cp operator + (const Cp& tmp)const { return Cp(a + tmp.a, b + tmp.b); }
	Cp operator * (const Cp& tmp)const { return Cp(a * tmp.a - b * tmp.b, a * tmp.b + b * tmp.a); }
	Cp operator - (const Cp& tmp)const { return Cp(a - tmp.a, b - tmp.b); }
	Cp &operator += (const Cp& tmp) { *this = *this + tmp; return *this; }
	Cp &operator -= (const Cp& tmp) { *this = *this - tmp; return *this; }
	Cp &operator *= (const Cp& tmp) { *this = *this * tmp; return *this; }
	void makeI() { a = 1, b = 0; }
	bool isI() { return a == 1 && b == 0; }
};

#define Upper_size 2 // Here to Define the Size of Your Matrix
template<typename M_type>
struct Matrix { // Matrix Structure
	#define dor(i, a, b) for (int i = (a); i < (b); i ++ ) // Defined for(without upper size)
	#define all(i) for (int i = (0); i < (Upper_size); i ++ )
	M_type s[Upper_size][Upper_size];
	void clear() { memset(s, 0, sizeof s); }
	void makeI() { all(i) s[i][i] = 1; }
	Matrix operator + (const Matrix& tmp)const { 
		Matrix ans; ans.clear(); 
		all(i) all(j) ans.s[i][j] = s[i][j] + tmp.s[i][j]; return ans; 
	}
	Matrix operator - (const Matrix &tmp)const {
		Matrix ans; ans.clear();
		all(i) all(j) ans.s[i][j] = s[i][j] - tmp.s[i][j]; return ans;
	}
	Matrix operator * (const Matrix& tmp)const {
		Matrix ans; ans.clear();
		all(i) all(j) all(k) ans.s[i][j] += (s[i][k] * tmp.s[k][j]);
		return ans;
	}
	Matrix &operator += (const Matrix& tmp) { *this = *this + tmp; return *this; }
	Matrix &operator *= (const Matrix& tmp) { *this = *this * tmp; return *this; }
	Matrix &operator -= (const Matrix& tmp) { *this = *this - tmp; return *this; }
	void init(int tmp[][Upper_size]) {
		all(i) all(j) s[i][j] = tmp[i][j];
	}
};

int main() {
	// Usage Of Complex-Structure
	Cp<int> a(0, 1); Cp<int> b(1, 2);
	a *= b; printf("%d %d\n", a.a, b.b);
	
	Matrix<int> M_a, M_b; // <int> must be defined for the typename
	int tmpa[2][2] = {{1, 1}, {2, 2}};
	int tmpb[2][2] = {{2, 3}, {4, 5}};
	M_a.init(tmpa), M_b.init(tmpb);
	M_a *= M_b;
	for (int i = 0; i < 2; i ++ )
		for (int j = 0; j < 2; j ++ )
			printf("%d ", M_a.s[i][j]);
}

Matrix 库可以展开循环,init 的方式也可以改的更简单。仅供参考吧

标签:tmp,const,Matrix,复数,ans,return,手写,Cp,乘法
From: https://www.cnblogs.com/LcyRegister/p/17063970.html

相关文章

  • 程序:打印九九乘法表
    #include<stdio.h>intmain(){inti=0;intj=0;for(i=1;i<=9;i++){for(j=1;j<=i;j++){printf("%d*%d=%-2d",i,j,i*j);......
  • 多项式乘法
    \(part\,0\)关于优化多项式乘法很自然的,一个n次多项式乘一个m阶多项式,其最终的结果是n+m阶,在空间上来说是线性的,然而为什么我们就会必须要一个\(O(nm)\)的二次级别的时......
  • html css js 手写简易轮播图
    源码下载:https://github.com/pine007/source-codes/blob/main/html-css-js-手写简易轮播图.zip1、效果2、编码<!DOCTYPEhtml><html><head><metacharset="UTF-......
  • 「解题报告」NOIP2021模拟19 乘法
    题目描述求\(n!\)的十六进制下去尾零后的后十六位。多组测试数据。数据范围\(T\le10,n<2^{64}\)这题目太简洁了,awsl思路开始裂开十六进制下的十六位就是\(......
  • 没有重复数字的全排列-js
    题目描述全排列,传入数字输出所有可能出现的情况思路分析经典回溯法例题采用闭包的方式记录总的结果(可以访问外部变量),记录每一层的结果,记录当前的深度,用记事本记录元......
  • SQL恢复数据
    备份数据库:industfo2020 目标数据库:indusfo恢复2022年1月1日前的数据。恢复设备点检表:insertintoindusfo.dbo.dc_checkstplanselect*fromindusfo2020.dbo.d......
  • C++手写一个PL/0编译器
    一PL/01.1简介​ PL/0语言可以看成PASCAL语言的子集,它的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。其编译过程采......
  • Class 复数类运算符重载
    (1条消息)运算符重载前缀++后缀++_peng864534630的博客-CSDN博客_运算符重载前缀和后缀#include<iostream>usingnamespacestd;classComplex{public:......
  • 手写笔记24:用字符流拷贝文件?
    ......
  • 手写笔记23:初探JUC并发编程
     ......