




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大整数运算字串对象版一实验名称:大整数运算字串对象版二实验目的:有一些整数,其位数可能上百位。在功能上对这些整数做加、减、乘、整除以及取余运算。在程序组织上要求通过大整数类型的设计,来体现更好的可读性和可维护性,并且对错误采用异常方法处理。输入数据有若干组,每组数据由一个运算符(+、-、*、/、%)和两个整数构成,整数的范围在-1015010150之间,如果遇到运算符,则表示运算结束。对于每组数据,输出其运算序号和运算结果,以/为例,每个结果单独成行。1) 如果结果超过200位,则输出“Too Large Number.”;2) 如果结果为空,或者前导为0,则输出“Illegal Number.”;3) 如果运算符不为上面5种,则输出“Illegal Operator.”,跳过后续的2个操作数;4) 如果除0,则输出“Divide By Zero.”。三实验内容与步骤: 本实验主要包括四个模块StrInt.h MyExcept.h StrIntApp.cpp StrInt.cpp(一) 界面设计 根据实验要求,设计类strint,该类型以string串作为存储数据的主体,再加上符号属性。同时满足能进行大整数的四则运算,应该将5种运算设计为该类的普通友元函数。 根据功能要求,大整数类型一共要进行加、减、乘、除、取余五种操作,而大整数无法用内部数据类型来描述,所以采用string类型,然后构造函数将其计算结果转化成大整数类型。由于考虑到类型功能的扩从,最终应能自然地允许字串表示的大整数参与大整数对象的四则运算,所以这五种运算都要设计成为该类型友元的普通函数。 class StrInt string _sign; string _num; public: friend StrInt add(const StrInt& a, const StrInt &b); friend StrInt sub(const StrInt& a, StrInt &b); friend StrInt mul(const StrInt& a, const StrInt &b); friend StrInt div(const StrInt& a, const StrInt &b); friend StrInt mod(const StrInt& a, const StrInt &b); ; 当默认创建一个对象时,为了使对象有意义,赋以0值。 StrInt(const string& a=0); 又要完成流设备对其对象进行输入输出操作。 friend istream& operator(istream& in,StrInt& a); friend ostream& operatorch&ch!=;) cinab; switch(ch) case-:coutsub(a,b)endl;break; case+:coutadd(a,b)endl;break; case*:coutmul(a,b)endl;break; case/:coutdiv(a,b)endl;break; case%:coutmod(a,b)ch&ch!=;) Try Cinab; Switch() . catch(MyExcept& e) coute.getwhat()1) throw MyIllegal(); if(a0=-)_sign=-;_num=_num.substr(1); if(_num.length()BYTENUM) throw MyTooLarge(); 为了实现各个运算,需要在add 、sub 、mul 、div 、mod五个单元内部实现五个位操作:按位加,按位减,按位乘,按位除以及按位小于比较: static string adding(const string& a,const string& b); static string subing(const string& a,const string& b); static string muling(const string& a,const string& b); static string diving(const string& a,const string & b,string& c=string(); static bool numLess(const string& a,const string& b); 函数算法的设计:输入输出流算法:由于StrInt类型是我们自己设计的一个数据类型,在main 函数中cin与cout无法识别它,所以要设计输入输出流算法,让它识别StrInt类型数据,把string字串分为sigh与num两部分,并使数据可以正常输入与输出: istream& operator(istream& in, StrInt& a) string s; ins; a=StrInt(s); return in; ostream& operator(ostream& out ,const StrInt&a) return outa._sign + a._num; add(a,b)算法:若a为0,则返回b。若b为0则返回a。为方便进行位加减操作比较a,b的大小,将大的放入s,将小的放入t。若a,b同号则计算位加,若a,b异号,则计算位减。 sub (a,b)算法:将b变一下符号,调用add算法。 mul(a,b)算法:分别处理符号和数串乘法,若a,b两者符号相同,则符号结果为正,否则为负,若a,b两者有一位0,则返回0.然后计算位乘muling(a._mun,b._num)。div(a,b)算法:分别处理符号和数串除法,若a,b两者符号相同,则符号结果为正,否则为负,若b为0,则出现异常,若数串a小于数串b,则由于是整除,所以直接返回0。计算位除diving(a,b)。mod(a,b)算法:分别处理符号和数串除法,若a,b两者符号相同,则结果为正,否则为负。若b为0,则异常,若a为0或者b为1,则返回0,若数串a小于数串b,则由于是取余,不用计算,直接返回a。计算位除diving (a._num,b._num,c),并根据所获得的c数串,产生大整数对象。四实验结果:将上面的工作完成以后,建立一个工程,包涵上述文件,然后进行编译。编译完成后,我们进行测试、调试、最终满足实验要求。五总结:这是我第一次做这样大规模的实验,历时差不多一个月。刚开始的时候感觉无从下手,我先把书好好看了两遍,开始模仿着书上的提示来做。就这样摸索着写了两个cpp文件,两个头文件,可是放不到一起,打开一个cpp文件时,另外三个文件就是不能同时在一个工程中打开。我很着急,找同学帮忙讲解,这才解决了这个问题。但是实验书上基本上的程序框架都已给出,但是加、减、乘、除以及取余的算法没有整体给出,需要我自己写。我根据书上的思路去编写五种计算方法,慢慢的雏形大体出来了,但是调试的时候系统会一直报错,调试的过程真是一个考验人的过程。明明感觉对了的,就是不过。这个过程持续了四五天,终于只剩一个错误了,但是我怎么都改不对,最后请同学帮忙调试,原来我把一个大写I小写i了。就这么一个粗心大意一直困扰着我,这让我明白了编程的严谨性,不能有一点点错误。调试好
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国聚甘油市场消费前景调研及发展态势展望报告
- 广东省惠州市小学消防安全测试题二十(含答案)
- 风电专业笔试题及答案
- 加油站节前安全培训试题及答案解析
- 湖南安全员a证考试题库书及答案解析
- 母婴保健模拟试题及答案
- 2025年船舶操纵与避碰题库及答案解析
- 人力资源考试题及答案
- 配件主管笔试试题及答案
- 教师教育学心理学考试题及答案
- 2025年司法局招聘司法所协理员历年考试试题与答案
- 《数据库系统概论》教案
- 小学学校“十五五”(2026-2030)发展规划
- 2025一建《建设工程项目管理》考前十页纸(完整版)
- 红楼梦第34回课件
- 摩托车整车采购合同范本
- 民事起诉状(人身保险合同纠纷)样式
- 9《犟龟》公开课一等奖创新教学设计
- 2025年乡村产业发展笔试模拟题库
- 2025滨海投资(天津)有限公司校园招聘考试备考题库及答案解析
- 2024-2025学年度江西建设职业技术学院单招《职业适应性测试》题库试题【名师系列】附答案详解
评论
0/150
提交评论