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是函数对 ...
随机推荐
- Scipy教程 - 统计函数库scipy.stats
http://blog.csdn.net/pipisorry/article/details/49515215 统计函数Statistical functions(scipy.stats) Pytho ...
- bootmgr解压缩
主要参考以下两个文章: 1. http://bbs.wuyou.com/forum.php?mod=viewthread&tid=211314 2. http://reboot.pro/f ...
- phantomjs的使用+Java代码+依赖js(兼容Linux和windows版本)
1. 在使用phantomjs的时候需要下载phantomjs,网上有window版本和Linux版本.将phantomjs放在Linux上的指定位置之后(如下面的/home/tpl/phantom ...
- 【shell脚本练习】网卡信息和简单日志分析
题目 1.写一个脚本getinterface.sh,脚本可以接受参数(i,I,a),完成以下任务: (1)使用以下形式:getinterface.sh [-i interface|-I IP|-a] ...
- Leetcode_83_Remove Duplicates from Sorted List
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41728739 Given a sorted linked ...
- CollapsingToolbarLayout使用
我们来看一下CollapsingToolbarLayout的使用场景. CollapsingToolbarLayout 可以看到,Toolbar的标题放大并在下方显示,当我们向上滑动列表时,顶部Hea ...
- Mahout kmeans聚类
Mahout K-means聚类 一.Kmeans 聚类原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚 ...
- lvs与haproxy
最近一直在看一些高可用性的负载均衡方案,当然那些f5之类的硬件设备是玩不起也接触不到了.只能看这些for free的开源方案. 目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实 ...
- 网络小白之WAN与LAN的区别
剑指Offer--网络小白之WAN与LAN的区别 基本作用 wan接口是外网接口,是用来连接互联网或局域网等外部网络的. lan接口是内网接口,是用来连接计算机终端或其他路由器等终端设备的. 举例 w ...
- Leetcode_154_Find Minimum in Rotated Sorted Array
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43416613 Suppose a sorted array ...