大数据操作,有例如以下问题:

计算:456789135612326542132123+14875231656511323132

456789135612326542132123*14875231656511323132

比較:7531479535511335666686565>753147953551451213356666865 ?

long long类型存储不了,存储不了就实现不成计算,怎么办???

为了解决以上问题,所以得定义一种结构类型以存储这些数据,并重载运算符支持这些数据的操作。为了方便代码的复用因此有了例如以下代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;const int maxn = 200;
struct bign{int len, s[maxn];/*下面的构造函数是C++中特有的,作用是进行初始化。其实,当定义bign x时,就会运行这个函数,把x.s清零。并赋x.len=1 。须要说明的是,在C++中,并不须要typedef就能够直接用结构体名来定义,并且还提供“自己主动初始化”的功能,从这个意义上说。C++比C语言方便   */ bign() {memset(s, 0, sizeof(s));len = 1;}bign(int num) {*this = num;}//定义为const參数,作用是 不能对const參数的值做改动 bign(const char* num) {*this = num;}/*以上是构造方法。初始化时对运行对应的方法*/bign operator = (int num) {char s[maxn];sprintf(s, "%d", num);*this = s;return *this;} //函数定义后的constkeyword,它表明“x.str()不会改变x” string str() const {string res = "";for(int i = 0; i < len; i++) res = (char)(s[i] + '0') + res;if(res == "") res = "0";return res;}void clean() {while(len > 1 && !s[len-1]) len--;}/* 下面是重载操作符 */ bign operator = (const char* num) {//逆序存储,方便计算 len = strlen(num);for(int i = 0; i < len; i++) s[i] = num[len-i-1] - '0';return *this;}bign operator + (const bign& b) const{bign c;c.len = 0;for(int i = 0, g = 0; g || i < max(len, b.len); i++) {int x = g;if(i < len) x += s[i];if(i < b.len) x += b.s[i];c.s[c.len++] = x % 10;g = x / 10;}return c;}bign operator * (const bign& b) {bign c; c.len = len + b.len;for(int i = 0; i < len; i++)for(int j = 0; j < b.len; j++)c.s[i+j] += s[i] * b.s[j];for(int i = 0; i < c.len-1; i++){c.s[i+1] += c.s[i] / 10;c.s[i] %= 10;}c.clean();return c;}bign operator - (const bign& b) {bign c; c.len = 0;for(int i = 0, g = 0; i < len; i++) {int x = s[i] - g;if(i < b.len) x -= b.s[i];if(x >= 0) g = 0;else {g = 1;x += 10;}c.s[c.len++] = x;}c.clean();return c;}bool operator < (const bign& b) const{if(len != b.len) return len < b.len;for(int i = len-1; i >= 0; i--)if(s[i] != b.s[i]) return s[i] < b.s[i];return false;}bool operator > (const bign& b) const{return b < *this;}bool operator <= (const bign& b) {return !(b > *this);}bool operator == (const bign& b) {return !(b < *this) && !(*this < b);}bign operator += (const bign& b) {*this = *this + b;return *this;}
};istream& operator >> (istream &in, bign& x) {string s;in >> s;x = s.c_str();return in;
}ostream& operator << (ostream &out, const bign& x) {out << x.str();return out;
}int main() {bign a;cin >> a;a += "123456789123456789000000000";cout << a*2 << endl;return 0;
}

C++高精度运算类bign (重载操作符)相关推荐

  1. 重载操作符与转换(上)

    重载操作符的作用: 通过操作符重载,程序员能够针对类类型的操作数定义不同的操作符版本.程序用移位操作符(>> 和 <<)进行输入输出,用加号操作符(+)将两个 Sales_it ...

  2. C++ 重载操作符与转换

    <C++ Primer 4th>读书笔记 重载操作符是具有特殊名称的函数:保留字 operator 后接需定义的操作符号. Sales_item operator+(const Sales ...

  3. C++复习 14 重载操作符与转换

    声明,所有的朋友,如果要转我的帖子,务必注明"作者:黑啤来源:CSDN博客"和 具体的网络地址http://blog.csdn.net/nx500/archive/2007/10/ ...

  4. java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定

    java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定 2016年05月11日 11:20:08 阅读数:6336 一. 计算机的小数计算一定范围内精确,超过范围只能 ...

  5. C++中operator关键字(重载操作符)

    operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算 ...

  6. C++ operator关键字(重载操作符)

    C++ operator关键字(重载操作符) operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方 ...

  7. C#运算符重载(操作符重载)

    1.什么是操作符重载 定义:(百科定义)就是把已经定义的.有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能.操作符重载可以将概括性的抽象操作符具体化,便于外部调用而无需知晓内部具体运算过 ...

  8. C++ operator关键字(重载操作符)(转)

    operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算 ...

  9. CCF NOI1089 高精度运算

    问题链接:CCF NOI1089 高精度运算. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 输入N对位数不超过1000的正整数,求它们的和.   (编程使用strunc创建 ...

最新文章

  1. sdwan安全如何加固?六种安全SD-WAN方案分享
  2. DPVS_DPVS配置说明
  3. java旋转爱心_p5.js临摹旋转爱心
  4. Floating-point exception
  5. 无监督学习 k-means_监督学习-它意味着什么?
  6. php文本框自动补全,PHP自动补全表单的两种方法
  7. mount: block device /dev/cdrom is write-protected, mounting read-only 解决方法
  8. Spark内核解析之六:Spark 内存管理
  9. python 类 super_python的类的super()
  10. jquery.autocomplete 使用解析
  11. 【原】Eclipse部署Maven web项目到tomcat服务器时,没有将lib下的jar复制过去的解决办法...
  12. C语言关键字浅析-char
  13. 侠客风云传服务器维护,侠客风云传服务器地址
  14. 编码:decode()/encode()、quote()/unquote()
  15. sort(function(a,b){return a -b})函数排序问题
  16. MySQL数据库被删除如何恢复
  17. windows下的流氓软件删得彻底点
  18. python中文意思是什么-python是什么意思中文翻译
  19. PCA(主成分分析)-------原理,推导,步骤、实例、代码
  20. 【kubernetes】coredns报错

热门文章

  1. Project Explore 再现
  2. 设计模式 - Iterator(迭代器)
  3. 软件不可靠,服务是王道
  4. 是什么造成了网管员的低工资?
  5. [转]Hyper-V功能大跃进 或引发市场洗牌
  6. 你需要知道的缓存击穿/穿透/雪崩
  7. swaggerui api.docs
  8. IDC:2015年第四季度全球WLAN市场增幅最高
  9. ph获取xml文件信息
  10. call(),apply(),bind()的用法及举例