高精度运算略解 在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.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进 ...
随机推荐
- JAVA父类的静态方法能否被子类重写?
静态: 在编译时所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间,在实例化之前这个方法就已经存在于内存,跟类的对象没什么关系.子类中如果定义了相同名称的静态方法,并不会重写,而应 ...
- ubuntu修改中文文件夹名字为英文
为了使用起来方便,装了ubuntu中文版,自然在home文件里用户目录的“桌面”.“图片”.“视频”.“音乐”……都是中文的. 很多时候都喜欢在桌面上放一些要操作的文件,Linux里命令行操作又多,难 ...
- Python连载38-协程、可迭代、迭代器、生产者消费者模型
一.生产者消费者模型 import multiprocessing from time import ctime def consumer(input_q): print("Into con ...
- 为什么使用B+Tree索引?
什么是索引? 索引是一种数据结构,具体表现在查找算法上. 索引目的 提高查询效率 [类比字典和借书] 如果要查"mysql"这个单词,我们肯定需要定位到m字母,然后从下往下找到y字 ...
- embedding技术
目录 word2vec 负采样 目标函数 反向梯度 层次softmax NPLM的目标函数和反向梯度 目标函数 反向梯度 GNN(图神经网络) deepwalk node2vec 附录 word2ve ...
- 第四周 Java课件内容动手动脑
1.JDK中的Math类 package ke1; public class TestMath { public static void main(String[] args) { /*------- ...
- 略学扩展Eculid算法
扩展 Euclid 算法 Euclid 算法 辗转相除法 计算两个数最大公因数 \(\text{gcd}(a,\,b) = \text{gcd}(b,\,a\%b)\) exEuclid 算法 裴蜀定 ...
- python连接数据库查询
import sqlite3 as db conn = db.connect(r'D:/data/test.db') print ('Opend database successfully \n') ...
- Robot Framework自定义测试库的作用域的理解
robot framework中,强大的测试库api支持,用户可根据实际需求定义测试库,导入后可使用自定义库中相应的关键字. 当自定义的测试库是类库,则需要考虑一个问题:类实例.用类实现的库可以有内部 ...
- .Net Core 微服务容器系列基础目录篇
1.开场白 HI,各位老铁,大家端午好,之前写了些关于.net core商城系列的文章,有点乱,今天心血来潮想着整理一下(今天只是先把目录列出来,后面的每篇文章这两天会进行重新修改的,目前先将就看下) ...