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

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

计算: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;} //函数定义后的const关键字,它表明“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;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oj系统格式错误_论文查重会不会检查格式?【paperpp吧】

高等学校一般都会要求大学生在毕业时需要写作毕业论文&#xff0c;并且会提前发出关于毕业论文的通知&#xff0c;在通知上一般会说明论文写作的相关要求&#xff0c;其中就会规定论文的相关格式。当然&#xff0c;学校也会在通知中说明论文查重的相关事宜&#xff0c;那么论文…

JavaScript Cookies

相关&#xff1a;jquery-cookie cookie 是存储于访问者的计算机中的变量&#xff0c;常用来存储用户名字&#xff0c;密码&#xff0c;日期&#xff0e; 示例&#xff1a; 1 document.cookie"usernameJohn Doe"; 2 document.cookie"usernameJohn Doe; expiresTh…

大数据 -- Hadoop集群搭建

Hadoop集群搭建 1.修改/etc/hosts文件 在每台linux机器上&#xff0c;sudo vim /etc/hosts 编写hosts文件。将主机名和ip地址的映射填写进去。编辑完后&#xff0c;结果如下&#xff1a; 2.配置ssh&#xff0c;实现无密码登录 四台虚拟机上&#xff0c;使用&#xff1a; ssh-ke…

通过示例休眠–第2部分(DetachedCriteria)

所以上次我们帮助正义联盟有效地管理了他们的超级英雄。 今天&#xff0c;我们集中讨论“复仇者联盟”将如何使用冬眠的“分离标准”找出每个超级英雄的敌人&#xff0c;以保护他们的超级英雄。 您可以从此处下载工作示例。 在此示例中&#xff0c;我们仅考虑两个实体。 复仇者…

2014编程之美初赛第二场

题目1 : 神奇的数列 时间限制:2000ms单点时限:1000ms内存限制:256MB描述 大神同学是一个热爱数字的孩子&#xff0c;她无时无刻不在思考生活与数学的联系。有一天&#xff0c;她发现其实公历的设计是有讲究的。 每4年就会多闰一天&#xff0c;每一百年又会有一年不是闰年&#…

usb大容量存储设备驱动_usb无法识别怎么办 如何解决usb识别故障【详细步骤】...

usb无法识别怎么办? 随着计算机硬件飞速发展&#xff0c;外围设备日益增多&#xff0c;键盘、鼠标等早已为人所共知&#xff0c;数码相机、MP3随身听接踵而至&#xff0c;这么多的设备&#xff0c;如何接入个人计算机?USB就是基于这个目的产生的。USB是一个使计算机周边设备连…

CSDN编程挑战——《交替字符串》

交替字符串 题目详情: 如果字符串str3能够由str1和str2中的字符按顺序交替形成&#xff0c;那么称str3为str1和str2的交替字符串。例如str1"abc"&#xff0c;str2"def"&#xff0c;那么"adbecf", "abcdef", "abdecf", "…

hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)

题目链接&#xff1a; Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1037 Accepted Submission(s): 298 Problem DescriptionBi Luo is a magic boy, he also has …

Java EE过去,现在和云7

最近的JavaOne 2011的一个突出主题是下一个主要的Java EE 7版本。 正如主题发言中所述&#xff0c;有关工作正在进行中。 它将包含我们已经从先行者那里知道的28个规范以及一些新规范。 没人可以告诉您确切的号码&#xff0c;因为EE 7仅在“及时”完成时才会接受新的规范。 这意…

python cnn识别图像_笨方法学习CNN图像识别(一)—— 图片预处理

— 全文阅读5分钟 —在本文中&#xff0c;你将学习到以下内容&#xff1a;通过数据增强增加样本量调整图片大小便于网络训练前言图像识别的准备工作就是要对我们拿到手的样本图片进行预处理&#xff0c;具体就是数据增强和调整图片大小&#xff0c;这些准备工作都是为训练网络做…

随机数发生器

很多人喜欢用 rand()%n产生区间 [0,n]内的一个随机整数。姑且不论这样产生的整数是否仍然均匀分布&#xff0c;当 n大于 RAND_MAX 时&#xff0c;此法并不能得到期望的结果。由于RAND_MAX 很可能只是32767这么小&#xff0c;在使用此法时应当小心。 #include "stdio.h&quo…

Request和Response详解

转自&#xff1a;http://zhidao.baidu.com/link?url8BI0cjlcFdBSJKHTZlpo874eqtbTJoZfrh3miQgM_05RvSER8skPiBc1wSPZtXT8OGGCHfVXFAzAosa6E5HBl_ 内置对象request&#xff1a;请求对象request.getParameter("名字") 获得客户端输入的信息***************request.get…

将Maven与Ivy集成

问题是&#xff1a;您在Ivy存储库中&#xff08;只有那里&#xff09;有一些资源&#xff0c;您想在基于Maven的项目中使用这些资源。 可能的解决方案&#xff1a; 由于Ivy可以轻松使用Maven风格的存储库&#xff08;因此&#xff0c;您的Ivy客户端可以继续使用Ivy并进行一些微…

用python下载辞典

用python下载词源词典Etymoline Online Etymology Dictionary是最好的 English 词源词典&#xff0c;现在来说没有之一。但是&#xff0c;一直在PC上查单词有时不是很方便&#xff0c;遂就想怎么才能在手机上使用。现在的手机上的词典&#xff0c;除了BlueDict、MDict之外&…

程序员都用什么来记录知识_1年前的小五都用 Python 来做什么?

↑ 点击上方 “凹凸数据” 关注 星标 ~ 每天更新&#xff0c;干货不断 (多图预警)注&#xff1a;这是小五一年前在知乎的回答&#xff0c;当时还只有凹凸数读一个公众号&#xff0c;所以很多图片都会带有数读或者知乎的水印。作为一个菜鸟数据分析师&#xff0c;只会sqlpytho…

CSDN编程挑战——《高斯公式》

高斯公式 题目详情: 高斯在上小学时发明了等差数列求和公式:12..1005050。现在问题在于给你一个正整数n&#xff0c;问你他可以表示为多少种连续正整数之和&#xff1f;&#xff08;自身也算&#xff09;。 输入格式&#xff1a; 多组数据&#xff0c;每组数据一行&#xff0c…

SQL-行转列(PIVOT)实例1

--未旋转之前的查询结果 select s.Name ShiftName,h.BusinessEntityID,d.Name as DpartmentName from HumanResources.EmployeeDepartmentHistory h inner join HumanResources.Department d on h.DepartmentIDd.DepartmentIDinner join HumanResources.Shift s on s.ShiftIDh…

将MongoDB与Morphia结合使用

在过去的几年中&#xff0c; NoSQL数据库&#xff08;例如CouchDB&#xff0c;Cassandra和MongoDB&#xff09;在不需要运行传统RDBMS的语义和开销的应用程序中得到了普及。 我不会进入选择NoSQL数据库的设计决策&#xff0c;因为其他人已经做得很好&#xff0c;但是我将结合我…

webservice接口_webservice服务器端发票识别接口

关键词&#xff1a;发票识别 私有云发票识别 发票识别API接口 webservice发票识别平台发票&#xff0c;一个再也熟悉不过的财务往来凭证&#xff0c;录入发票&#xff0c;一项让多少财会人员头疼的工作。过去录入一张发票需要一个财会人员5分钟的时间&#xff0c;那么这个人在工…

二叉树学习——简单入门题

入门题一&#xff1a; 输入一颗二叉树&#xff0c;你的任务是按从上到下、从左到右的顺序输出各个节点的值。每个节点都按照从根节点到它的移动序列给出 &#xff08;L表示左&#xff0c;R表示右&#xff09;。在输入中&#xff0c;每个节点的左括号和右括号之间没有空格&#…