先放代码:

#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++中,用类和重载运算符写高精模板的更多相关文章

  1. PHP中与类有关的运算符

    与类有关的运算符: new, instanceof:判断一个“变量”(对象,数据),是否是某个类的“实例”: 示意如下: class  A {} class  B {} class  C extend ...

  2. 继续写高精!noip2012国王游戏。。。

    国王游戏 题目描述: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王 ...

  3. C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】

    重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的位 unsignedchar 相同范围的值,即:0到255. 这个类能够捕获下溢和上溢错误,因此使用起来比内置u ...

  4. YTU 2443: C++习题 复数类--重载运算符3+

    2443: C++习题 复数类--重载运算符3+ 时间限制: 1 Sec  内存限制: 128 MB 提交: 1368  解决: 733 题目描述 请编写程序,处理一个复数与一个double数相加的运 ...

  5. YTU 2441: C++习题 复数类--重载运算符2+

    2441: C++习题 复数类--重载运算符2+ 时间限制: 1 Sec  内存限制: 128 MB 提交: 847  解决: 618 题目描述 定义一个复数类Complex,重载运算符"+ ...

  6. YTU 2440: C++习题 复数类--重载运算符+,-,*,/

    2440: C++习题 复数类--重载运算符+,-,*,/ 时间限制: 1 Sec  内存限制: 128 MB 提交: 1189  解决: 774 题目描述 定义一个复数类Complex,重载运算符& ...

  7. YTU 2439: C++习题 复数类--重载运算符+

    2439: C++习题 复数类--重载运算符+ 时间限制: 1 Sec  内存限制: 128 MB 提交: 1022  解决: 669 题目描述 定义一个复数类Complex,重载运算符"+ ...

  8. 结构体作为map的key或放入set中,需要重载<运算符

    结构体作为map的key或放入set中,需要重载<运算符,如下: typedef struct tagRoadKey{    int m_i32Type;    int m_i32Scale; ...

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

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

随机推荐

  1. 使用C++的string实现高精度加法运算

    对于超大数字的运算,用long long int仍然不能解决,这时候就需要考虑通过模拟运算和数组存储来实现高精度运算. 本文讨论借助C++的string来实现高精度的运算. 首先输入的量直接存储为st ...

  2. 精通mysql之精通EXPLAIN

    EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型.从最好到最差的连接类型为const.eq_reg.ref.range.indexh ...

  3. Tomcat如何实现资源安全管理

    在了解了认证模式及Realm域后,我们看看Tomcat是如何设计实现资源安全管理的.在认证模式上,必须要支持多种认证模式,包括Basic模式.Digest模式.Form模式.Spnego模式.SSL模 ...

  4. C++ Primer 有感(new和delete表达式)

    定义变量时,必须指定其数据类型和名字.而动态创建对象时,只需指定其数据类型,而不必为该对象命名.取而代之的是,new表达式返回指向性创建的指针. 1.动态创建对象的默认初始化 对于类类型的对象,用该类 ...

  5. Dynamics CRM 同一实体多个Form显示不同的Ribbon按钮

    自CRM2011引入多FORM窗体,并且对不同的窗体引入了角色控制,给我们的客制化开发带来了多样化,既然有了多窗体也就理所当然的有了在不同的窗体显示不同的Ribbon按钮的需求,具体怎么做见下面的博客 ...

  6. SpriteBuilder复杂CCB在App场景加载时报错排查

    Player.CCB由body和arm两部分组成,它们都开启物理使能. 在GameScene.ccb中新建一个物理对象,将Player.ccb拖入该对象.此时编译运行App均正常. 然后继续添加其他物 ...

  7. 【一天一道LeetCode】#54. Spiral Matrix

    一天一道LeetCode系列 (一)题目 Given a matrix of m x n elements (m rows, n columns), return all elements of th ...

  8. 【一天一道LeetCode】#29. Divide Two Integers

    一天一道LeetCode系列 (一)题目 Divide two integers without using multiplication, division and mod operator. If ...

  9. Java集合之Stack

    Stack是栈,特性是先进后出(FILO,First In Last Out).Stack是继承于Vector(矢量队列),由于Vector是同数组实现的,Stack也是通过数组而非链表. Stack ...

  10. 【Qt编程】基于Qt的词典开发系列<十>--国际音标的显示

    在年前的一篇文章中,我提到要学习Qt.于是在这学期看了一个月的qt.现在大致对qt有了一些了解.但是现在导师又把我调到了android应用开发平台,所以说qt的学习要搁置了.本打算这学期做一个单词查询 ...