C++中,用类和重载运算符写高精模板
先放代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct bign
{
int len,s[1000];
bign(){len=1;memset(s,0,sizeof(s));}//构造函数,用来初始化成员变量
bign(int num){*this=num;}//拷贝构造函数,用来实现bign a=1234;
bign(char *num){*this=num;}//拷贝构造函数,用来实现bign a="1234";
bign operator =(const char *num)//重载=运算符,实现a=1234,括号中是=后接的数,以下是高精赋值,返回要返回结果
{
len=strlen(num);
for(int i=0;i<len;i++)s[i]=num[len-i-1]-'0';
return *this;//*this代表当前结构体
}
bign operator =(const int num)//重载=运算符,实现a="1234"
{
char a[1000];
sprintf(a,"%d",num);
*this=a;
return *this;
}
bign operator +(bign &a)//重载+运算符,以下是高精加代码
{
bign c;
c.len=max(len,a.len)+1;//默认两数相加进位
for(int i=0,x=0;i<c.len;i++)
{
c.s[i]=s[i]+a.s[i]+x;
x=c.s[i]/10;
c.s[i]%=10;
}
if(c.s[c.len-1]==0)c.len--;//如果没有进位,长度-1
return c;
}
bign operator +=(bign &a)//重载+=运算符
{
*this=*this+a;
return *this;
}
bool operator <(bign &x)
{
if(len!=x.len)return len<x.len;//不能有前导0
for(int i=len-1;i>=0;i--)
if(s[i]!=x.s[i])
return s[i]<x.s[i];
return false;//全部相等,<不成立
}
bool operator >(bign &x){return x<*this;}//方便的是,只要重载< 运算符,其他关系运算符都可以表示出来
bool operator <=(bign &x){return !(x<*this);}
bool operator >=(bign &x){return !(*this<x);}
bool operator ==(bign &x){return !(x<*this||*this<x);}
bool operator !=(bign &x){return x<*this||*this<x;}
};
ostream& operator <<(ostream &out,bign &x)//重载<<,实现cout<<a;
{
for(int i=x.len-1;i>=0;i--)cout<<x.s[i];
return out;
}
istream& operator >>(istream &in,bign &x)//重载>>,实现cin>>a;
{
char num[1000];
in>>num;
x=num;
return in;
}
int main()
{
bign a,b,c;
cin>>a>>b;
c=a+b;
cout<<c<<endl;
return 0;
}
有人问
各种const是干什么的?
其实在这里,const的作用只是“增加程序可读性”,就是表示“这是一个不可改变的量”。
还有人问
bign(int num){*this=num;}
bign(char *num){*this=num;}
是用来干什么的?
其实这个与bign a=123;或bign a="1234";有关,就是在定义的时候赋值。
为什么用=呢?C++编译器可以自动区别赋值和初始化(构造函数是初始化),对于算法,只要记住就可以了。
本文相关知识:http://blog.csdn.net/c20190102/article/details/70738801
C++中,用类和重载运算符写高精模板的更多相关文章
- PHP中与类有关的运算符
与类有关的运算符: new, instanceof:判断一个“变量”(对象,数据),是否是某个类的“实例”: 示意如下: class A {} class B {} class C extend ...
- 继续写高精!noip2012国王游戏。。。
国王游戏 题目描述: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王 ...
- C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】
重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的位 unsignedchar 相同范围的值,即:0到255. 这个类能够捕获下溢和上溢错误,因此使用起来比内置u ...
- YTU 2443: C++习题 复数类--重载运算符3+
2443: C++习题 复数类--重载运算符3+ 时间限制: 1 Sec 内存限制: 128 MB 提交: 1368 解决: 733 题目描述 请编写程序,处理一个复数与一个double数相加的运 ...
- YTU 2441: C++习题 复数类--重载运算符2+
2441: C++习题 复数类--重载运算符2+ 时间限制: 1 Sec 内存限制: 128 MB 提交: 847 解决: 618 题目描述 定义一个复数类Complex,重载运算符"+ ...
- YTU 2440: C++习题 复数类--重载运算符+,-,*,/
2440: C++习题 复数类--重载运算符+,-,*,/ 时间限制: 1 Sec 内存限制: 128 MB 提交: 1189 解决: 774 题目描述 定义一个复数类Complex,重载运算符& ...
- YTU 2439: C++习题 复数类--重载运算符+
2439: C++习题 复数类--重载运算符+ 时间限制: 1 Sec 内存限制: 128 MB 提交: 1022 解决: 669 题目描述 定义一个复数类Complex,重载运算符"+ ...
- 结构体作为map的key或放入set中,需要重载<运算符
结构体作为map的key或放入set中,需要重载<运算符,如下: typedef struct tagRoadKey{ int m_i32Type; int m_i32Scale; ...
- 【C++】C++中重载运算符和类型转换
输入输出运算符 输入输出运算符 输入输出运算符 算术和关系运算符 相等运算符 关系运算符 赋值运算符 复合赋值运算符 下标运算符 递增和递减运算符 成员访问运算符 函数调用运算符 lambda是函数对 ...
随机推荐
- Oracle EBS R12多组织(多OU)访问架构
Oracle EBS R12多组织访问架构 多组织架构实现了经营单位(OU)的数据安全性,在底层数据表中有一列ORG_ID来记录数据所属的经营单一,所有多OU的基表都是以"_ALL" ...
- Java应用程序使用系统托盘资源
要想使自己开发的Java SE项目运行在自己的电脑系统托盘上,这并不是什么难事,总共需要如下几步即可: 1.线判断一下,系统托盘是否可用,否则接下来的程序将不可避免的报出异常咯 2.获得一个Syste ...
- 【Unity Shaders】Diffuse Shading——在Surface Shader中使用properties
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- mysql进阶(二十一)删除表数据
MySQL删除表数据 在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句.DELETE语句可以通过WHERE对要删除的记录进行选择.而使用TRUNC ...
- Android群英传帝落篇——程序人生,路漫漫其修远兮,吾将上下而求索!
Android群英传帝落篇--程序人生,路漫漫其修远兮,吾将上下而求索! 当写这篇博客的时候,自2016-02-22到现在5.2号,一晃眼,也㓟两个多月就过去了,我才将这本书看完,虽然写笔记花了很大的 ...
- volley请求原理
Volley 实现原理解析 本文为 Android 开源项目实现原理解析 中 Volley 部分 项目地址:Volley,分析的版本:35ce778,Demo 地址:Volley Demo 分析者:g ...
- 【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流
GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details ...
- Android驱动中的Kconfig文件与Makefile文件
内核源码树的目录下都有两个文档Kconfig(2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文 ...
- JFinal开发环境搭建,JFinal开发案例
JFinal 是基于 Java 语言的极速 WEB + ORM 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所 ...
- android wheelview实现三级城市选择
很早之前看淘宝就有了ios那种的城市选择控件,当时也看到网友有分享,不过那个写的很烂,后来(大概是去年吧),我们公司有这么一个项目,当时用的还是网上比较流行的那个黑框的那个,感觉特别的丑,然后我在那个 ...