高精度

高精度,即高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。

重载运算符

运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

今以高精度 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&lt;a,b≤1010 0000&lt;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&gt;ab&gt;ab>a,则 a−b=−(b−a)a-b=-(b-a)a−b=−(b−a)。

代码见文首。

练习

  1. 高精度除法luoguP1480\text{luoguP1480}luoguP1480
  2. 高精度开根luoguP2293\text{luoguP2293}luoguP2293

高精度运算略解 在struct中重载运算符的更多相关文章

  1. 【C++】C++中重载运算符和类型转换

    输入输出运算符 输入输出运算符 输入输出运算符 算术和关系运算符 相等运算符 关系运算符 赋值运算符 复合赋值运算符 下标运算符 递增和递减运算符 成员访问运算符 函数调用运算符 lambda是函数对 ...

  2. c++中重载运算符

    重载运算符 1,成员函数运算符 运算符重载为类的成员函数一般格式如下 <函数类型> operator <运算符> (参数表) {函数体} 调用成员函数运算符如下 <对象名 ...

  3. Opencv中Mat矩阵相乘——点乘、dot、mul运算详解

    Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 2016年09月02日 00:00:36 -牧野- 阅读数:59593 标签: Opencv矩阵相乘点乘dotmul 更多 个人分类: O ...

  4. 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 ...

  5. C++中重载函数详解

    函数的重载详解 什么时函数重载: 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避 ...

  6. C++ Primer : 第十四章 : 重载运算与类型转换之重载运算符

    重载前须知 重载运算符是特殊的函数,它们的名字由operator和其后要重载的运算符号共同组成. 因为重载运算符时函数, 因此它包含返回值.参数列表和函数体. 对于重载运算符是成员函数时, 它的第一个 ...

  7. 【CTF 攻略】CTF比赛中关于zip的总结

    [CTF 攻略]CTF比赛中关于zip的总结   分享到: --> 本文首发于安全客,建议到原地址阅读,地址:http://bobao.360.cn/ctf/detail/203.html 前言 ...

  8. 详解Python编程中基本的数学计算使用

    详解Python编程中基本的数学计算使用 在Python中,对数的规定比较简单,基本在小学数学水平即可理解. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列位肯 ...

  9. c++中有些重载运算符为什么要返回引用

    事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进 ...

随机推荐

  1. Hive bucket表

    Hive 桶 对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是 针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余 ...

  2. Jenkins把GitHub项目做成Docker镜像

    本文是<Jenkins流水线(pipeline)实战>系列的第三篇,前面已对Jenkins流水线有了基本认识,也试过从GitHub下载pipeline脚本并执行,今天的实战是编写一段pip ...

  3. 44 (OC)* 野指针、空指针

    一: 空指针 : 没有存储任何内存地址的指针就称为空指针(NULL指针). 被赋值为nil的指针,在没有被具体初始化之前,为nil.nil.Nil.NULL.NSNULL的含义和区别 nil:OC中的 ...

  4. [AWS] 02 - Pipeline on EMR

    Data Analysis with EMR. Video demo: Run Spark Application(Scala) on Amazon EMR (Elastic MapReduce) c ...

  5. spring项目与logstash和Elasticsearch整合

    原创/朱季谦   最近在做一个将项目日志通过logstash传到Elasticsearch的功能模块,经过一番捣鼓,终于把这个过程给走通了,根据自己的经验,做了这篇总结文章,希望可以给各位玩logst ...

  6. SQL Server 内存优化表的索引设计

    测试的版本:SQL Server 2017 内存优化表上可以创建哈希索引(Hash Index)和内存优化非聚集(NONCLUSTERED)索引,这两种类型的索引也是内存优化的,称作内存优化索引,和基 ...

  7. calico的ipip与bgp的模式分析

    1.前言 BGP工作模式: bgp工作模式和flannel的host-gw模式几乎一样: bird是bgd的客户端,与集群中其它节点的bird进行通信,以便于交换各自的路由信息: 随着节点数量N的增加 ...

  8. Java的EOF标识?

     这篇是关于JAVA中EOF标识的讲解,之前在工作上碰到过一个问题,有人问过,不能通过判断EOF来知道文件有没有读取完毕吗?其实,还真不能.  直接从JDK接口文档入手,以FileInputStrea ...

  9. 记一次jmeter从txt文本获取数值并给测试计划的变量赋值,jmeter永久性修改变量。

    前言: 需要永久性的改变变量. 其实这个办法并不是最好的,但是是最容易实现的.后期可做成从数据库里直接取值. 赋值BeanShell import java.io.File; import java. ...

  10. logcat粗略了解(一)

    Logcat Logcat介绍:logcat是android的一个命令行工具,用于的到程序的log信息 Logcat命令格式: [adb] logcat [<option>]…[<f ...