首页 > 其他分享 >高精度模板

高精度模板

时间:2025-01-03 15:46:53浏览次数:1  
标签:return 高精度 int len st -- 模板

高精度加法,减法,乘法 \(\times\) 2。(可判负数)

struct st {
	bool f=0;
	int len=0;
	int a[10086];
	void clear() {
		memset(a,0,sizeof(a));
		f=0;
		len=0;
	}
	void read() {
		string s;
		cin>>s;
		len=s.size();
		s=" "+s;
		if(s[1]=='-') {
			for(int i=2; i<=len; i++) {
				a[len-i+1]=s[i]-'0';
			}
			f=1;
			len--;
		} else {
			for(int i=1; i<=len; i++) {
				a[len-i+1]=s[i]-'0';
			}
		}

	}
	void print() {
		bool fl=0;
		if(f) cout<<"-";
		for(int i=len; i>=1; i--) {
			if(a[i]) fl=1;
			if(fl) cout<<a[i];
		}
		if(fl==0) cout<<0;
		cout<<"\n";
	}
	bool operator > (st b) {
		if(f==0&&b.f==0) {
			if(b.len!=len) {
				return len>b.len;
			}
			for(int i=len; i>=1; i--) {
				if(a[i]!=b.a[i]) return a[i]>b.a[i];
			}
			return 0;
		} else if(f!=b.f) {
			return f<b.f;
		} else {
			if(b.len!=len) {
				return len<b.len;
			}
			for(int i=len; i>=1; i--) {
				if(a[i]!=b.a[i]) return a[i]<b.a[i];
			}
			return 0;
		}
	}
	st operator + (st b) {
		st c;
		c.len=max(len,b.len);
		if(b.f==f) {
			for(int i=1; i<=c.len; i++) {
				c.a[i]+=a[i]+b.a[i];
				c.a[i+1]+=c.a[i]/10;
				c.a[i]%=10;
			}
			while(c.a[c.len+1]) c.len++;
			c.f=f;
		} else if(f==1) {
			st a=*this;
			a.f=0;
			c=a-b;
		} else {
			st a=b;
			a.f=0;
			c=b-a;
		}
		return c;
	}
	st operator - (st b) {
		if(f==0&&b.f==1) {
			st a=b;
			a.f=0;
			return *this+a;
		}
		else if(f==1&&b.f==0)
		{
			st a=*this;
			a.f=0;
			st c=a+b;
			c.f^=1;
			return c;
		} 
		else if(f==1&&b.f==1)
		{
			st aa=*this,bb=b;
			aa.f=0;
			bb.f=0;
			st c=bb-aa;
			return c;
		}
		st c;
		c.clear();
		if(b>*this) {
			swap(*this,b);
			c.f^=1;
		}
		c.len=max(len,b.len);
		for(int i=1; i<=c.len; i++) {
			c.a[i]+=a[i]-b.a[i];
			if(c.a[i]<0) {
				c.a[i]+=10;
				c.a[i+1]--;
			}
		}
		return c;
	}
	st operator * (st b) {
		st c;
		if(a[1]=='0'||b.a[1]=='0')
		{
			c.f=0;
			c.len=1;
			c.a[1]=0;
			return c;
		}
		c.f=(f!=b.f);
		c.len=len+b.len;
		for(int i=1; i<=len; i++) {
			for(int j=1; j<=b.len; j++) {
				c.a[i+j-1]+=a[i]*b.a[j];
			}
		}
		for(int i=1; i<=c.len; i++) {
			c.a[i+1]+=c.a[i]/10;
			c.a[i]%=10;
		}
		while(c.a[c.len]==0) c.len--;
		return c;
	}
	st operator * (int b) {
		st c;
		if(a[1]=='0'||b==0)
		{
			c.f=0;
			c.len=1;
			c.a[1]=0;
			return c;
		}
		c.f=(f);
		c.len=len*2;
		for(int i=1; i<=len; i++) {
			c.a[i]=a[i]*b;
		}
		for(int i=1; i<=c.len; i++) {
			c.a[i+1]+=c.a[i]/10;
			c.a[i]%=10;
		}
		while(c.a[c.len]==0) c.len--;
		return c;
	}
};

标签:return,高精度,int,len,st,--,模板
From: https://www.cnblogs.com/yaaaaaan/p/18650217

相关文章

  • C++之模板进阶
    文章目录1.引言2.非类型模板参数2.1概念及使用2.2与#define定义宏的对比3.模板的特化3.1概念3.2函数模板特化3.3类模板特化3.3.1全特化3.3.2偏特化(也称半特化)3.3.3类模板特化应用示例4.模板的分离编译(了解)4.1什么是分离编译4.2模板的分离编译5.模......
  • 大模型提示词(Prompt)模板推荐
    只有提示词写得好,与大模型的互动才能更高效。提示词不仅仅是与AI对话的起点,更是驱动模型产生高质量输出的关键因素。本文将介绍大模型提示词的概念、意义,并分享一些实用的提示词模板,帮助AI玩家更好地利用大语言模型。大模型提示词的介绍提示词(Prompt),是用于大语言模型的一段引导......
  • Vue.js 模板语法
    Vue.js使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。Vue.js的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进DOM的系统。结合响应系统,在应用状态改变时,Vue能够智能地计算出重新渲染组件的最小代价并应用到DOM操作上......
  • HTML5网页设计成品:汽车介绍特斯拉 (dreamweaver作业静态HTML网页设计模板)
    ......
  • 模板方法模式
    实验24:模板方法模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解模板方法模式的动机,掌握该模式的结构;2、能够利用模板方法模式解决实际问题。 [实验任务一]:数据库连接对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义......
  • 深入理解 Java 模板模式:代码复用与架构优化的利器
    深入理解Java模板模式:代码复用与架构优化的利器在Java编程世界中,设计模式如同智慧的结晶,帮助开发者应对各种复杂的软件开发需求。其中,模板模式(TemplatePattern)以其独特的代码复用和流程标准化能力,成为构建灵活且可维护系统的关键工具。今天,让我们一同深入探究Java中......
  • 16. C++快速入门--模板和Concept
    待修改1定义模板1.1模板形参模板参数模板可以有两种参数,一种是类型参数,一种是非类型参数这两种参数可以同时存在,非类型参数的类型可以是模板类型形参template< typenameT,//1 Ta//2>第一个参数是类型参数T第二个是非类型参数a,它的类型和形参......
  • [NOIP1998 普及组] 阶乘之和——高精度运算
    题目描述用高精度计算出\(S=1!+2!+3!+\cdots+n!\)(\(n\le50\))。其中!表示阶乘,定义为\(n!=n\times(n-1)\times(n-2)\times\cdots\times1\)。例如,\(5!=5\times4\times3\times2\times1=120\)。输入格式一个正整数\(n\)。输出格式一个正整数\(S......
  • 可变参数模板
    可变参数模板(C++11)上周末实现双向链表时参照了STL中的list链表,在查阅文档时发现list下的emplace方法的模板参数是template<class...Args>当时就很疑惑,不知道这是什么参数,在网上学习了他人的博客后在此写下自己的见解。可变参数的概念可变参数即可以接收多个参数,如C语言中的......
  • 模板方法模式
    实验24:模板方法模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解模板方法模式的动机,掌握该模式的结构;2、能够利用模板方法模式解决实际问题。[实验任务一]:数据库连接对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了co......