高精度运算略解 在struct中重载运算符
高精度
高精度,即高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。
重载运算符
运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
今以高精度 a−ba-ba−b 为例,展示在struct中重载运算符的方法。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define reg register
const int MAXN=10010;
struct node{
bool f; //是否为负
char a[MAXN+10];
node(){ //对结构体进行初始化
f=0;
memset(a,0,sizeof(a));
}
void read(){ //读入一个非负的node数
char s[MAXN+10];
scanf("%s",s+1);
int l=strlen(s+1);
for(reg int i=1;i<=l;++i)
a[i]=s[l-i+1]-'0';
}
void print(){ //打印一个node数
bool tf=0; //是否没有前缀0
if(f) printf("-");
for(reg int i=MAXN;i>=1;--i){
if(a[i]) tf=1;
if(tf) printf("%d",a[i]);
}
if(!tf) printf("0");
}
node&operator+(node&b){ //重载加法+
/*
在这个函数中,operator表示重载,b是+号右边的加数,
this是一个指向自己的node类型的指针,返回用*this
*/
for(reg int i=1;i<=MAXN;++i){
a[i]+=b.a[i];
if(a[i]>9){
a[i]-=10;
++a[i+1];
}
}
return*this;
}
//对于a-b,若b>a,则a-b=-(b-a)。
bool operator>(node&b){
for(reg int i=MAXN;i>=1;--i)
if(a[i]!=b.a[i])
return bool(a[i]>b.a[i]);
return 0;
}
node&operator-(node&b){
if(b>*this){
node t=*this;*this=b;b=t;
f=1;
}
for(reg int i=MAXN;i>=1;--i)
a[i]-=b.a[i];
for(reg int i=1;i<=MAXN;++i)
if(a[i]<0){
a[i]+=10;
--a[i+1];
}
return*this;
}
//省事
node&operator+=(node&e){
return*this+e;
}
node&operator-=(node&e){
return*this-e;
}
}a,b;
int main(){
a.read();b.read();a-=b;
a.print();
}
题目描述 luoguP1601\text{luoguP1601}luoguP1601
高精度加法,相当于 a+ba+ba+b Problem,不用考虑负数。
输入格式
分两行输入 a,b≤10500a,b\leq10^{500}a,b≤10500
输出格式
输出只有一行,代表 a+ba+ba+b 的值
输入样例
1
1
输出样例
2
Solution 1601\text{Solution 1601}Solution 1601
考虑用数组 A,BA,BA,B 存储大数 a,ba,ba,b 进行计算。为了实现方便,常使用 struct 结构体存储。代码见文首。
题目描述 luoguP2142\text{luoguP2142}luoguP2142
高精度减法
输入格式
两个整数 a,ba,ba,b
输出格式:
结果
输入样例
2
1
输出样例
1
数据规模与约定
对于 100100%100 的数据,有 0<a,b≤1010 0000<a,b\leq10^{10\ 000}0<a,b≤1010 000
Solution 2142\text{Solution 2142}Solution 2142
注意判负即可。计算 a−b (a,b≥0)a-b\ (a,b\geq0)a−b (a,b≥0) 时,若 b>ab>ab>a,则 a−b=−(b−a)a-b=-(b-a)a−b=−(b−a)。
代码见文首。
练习
高精度运算略解 在struct中重载运算符的更多相关文章
- 【C++】C++中重载运算符和类型转换
输入输出运算符 输入输出运算符 输入输出运算符 算术和关系运算符 相等运算符 关系运算符 赋值运算符 复合赋值运算符 下标运算符 递增和递减运算符 成员访问运算符 函数调用运算符 lambda是函数对 ...
- c++中重载运算符
重载运算符 1,成员函数运算符 运算符重载为类的成员函数一般格式如下 <函数类型> operator <运算符> (参数表) {函数体} 调用成员函数运算符如下 <对象名 ...
- Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 2016年09月02日 00:00:36 -牧野- 阅读数:59593 标签: Opencv矩阵相乘点乘dotmul 更多 个人分类: O ...
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ...
- C++中重载函数详解
函数的重载详解 什么时函数重载: 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避 ...
- C++ Primer : 第十四章 : 重载运算与类型转换之重载运算符
重载前须知 重载运算符是特殊的函数,它们的名字由operator和其后要重载的运算符号共同组成. 因为重载运算符时函数, 因此它包含返回值.参数列表和函数体. 对于重载运算符是成员函数时, 它的第一个 ...
- 【CTF 攻略】CTF比赛中关于zip的总结
[CTF 攻略]CTF比赛中关于zip的总结 分享到: --> 本文首发于安全客,建议到原地址阅读,地址:http://bobao.360.cn/ctf/detail/203.html 前言 ...
- 详解Python编程中基本的数学计算使用
详解Python编程中基本的数学计算使用 在Python中,对数的规定比较简单,基本在小学数学水平即可理解. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列位肯 ...
- c++中有些重载运算符为什么要返回引用
事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进 ...
随机推荐
- 24 (OC)* 加密
一 .MD5加密 MD5加密是最常用的加密方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码. MD5主要特点是 不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样(也不是 ...
- 机器学习常用性能度量中的Accuracy、Precision、Recall、ROC、F score等都是些什么东西?
一篇文章就搞懂啦,这个必须收藏! 我们以图片分类来举例,当然换成文本.语音等也是一样的. Positive 正样本.比如你要识别一组图片是不是猫,那么你预测某张图片是猫,这张图片就被预测成了正样本. ...
- 使用 Eslint & standard 规范前端代码
前言 JavaScript的动态语言类型,给它带来了独特的魅力,产生了风格多样的开发范式,同时也带来了一些问题,从运行时常见的 undefined .null 报错,到代码随意的加减分号.换行.空格, ...
- 转载:elastic5.x部署常见问题总结
原博文名称:ElasticSearch 5.0.0 安装部署常见错误或问题 原博文地址为:http://www.dajiangtai.com/community/18136.do?origin=csd ...
- spring5 源码深度解析----- AOP的使用及AOP自定义标签
我们知道在面向对象OOP编程存在一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志,安全检测等,我们只有在每个对象里引入公共行为,这样程序中就产生了大量的重复代码,所以有了面向对 ...
- There is a cycle in the hierarchy解决
前言: 在一次项目中,分页查询公告列表信息后,在遍历查询到的公告列表时出现了死循环“There is a cycle in the hierarchy”错误,分析原因是因为在公告实体类中包含了商铺对象 ...
- springboot 启动报错Consider defining a bean of type 'com.example.springbootdruid.mapper.UserMapper' in your configurati
一.问题 springboot项目启动时报错: Field userMapper in com.example.springbootdruid.service.impl.UserServiceImpl ...
- Mysql的MyISAM和InnoDB存储引擎的区别
从以下几个方面: 1.存储结构 每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型. .frm文件存储表定义. 数据文件的扩展名为.MYD (MYData). ...
- MYSQL-用户密码修改
解决方法如下:1.终端中结束当前正在运行的mysql进程.# sudo /etc/init.d/mysql stop2.用mysql安全模式运行并跳过权限验证.# sudo /usr/bin/mysq ...
- 阿里云VS腾讯云 谁才是中国未来的云计算之王?
阿里云早在 2009 年就已经开始布局云计算领域,具有先发优势.据统计,40% 的中国 500 强企业.近一半中国上市公司.80% 中国科技类公司是阿里云的客户.而腾讯云基于腾讯自身在游戏.视频.社交 ...