预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

大整数运算·字串对象版 一·实验名称: 大整数运算·字串对象版 二·实验目的: 有一些整数,其位数可能上百位。在功能上对这些整数做加、减、乘、整除以及取余运算。在程序组织上要求通过大整数类型的设计,来体现更好的可读性和可维护性,并且对错误采用异常方法处理。 输入数据有若干组,每组数据由一个运算符(+、-、*、/、%)和两个整数构成,整数的范围在-10^150~10^150之间,如果遇到运算符‘@’,则表示运算结束。 对于每组数据,输出其运算序号和运算结果,以‘/’为例,每个结果单独成行。 如果结果超过200位,则输出“TooLargeNumber.”; 如果结果为空,或者前导为0,则输出“IllegalNumber.”; 如果运算符不为上面5种,则输出“IllegalOperator.”,跳过后续的2个操作数; 如果除0,则输出“DivideByZero.”。 三·实验内容与步骤: 本实验主要包括四个模块——StrInt.hMyExcept.hStrIntApp.cppStrInt.cpp 界面设计 根据实验要求,设计类strint,该类型以string串作为存储数据的主体,再加上符号属性。同时满足能进行大整数的四则运算,应该将5种运算设计为该类的普通友元函数。根据功能要求,大整数类型一共要进行加、减、乘、除、取余五种操作,而大整数无法用内部数据类型来描述,所以采用string类型,然后构造函数将其计算结果转化成大整数类型。由于考虑到类型功能的扩从,最终应能自然地允许字串表示的大整数参与大整数对象的四则运算,所以这五种运算都要设计成为该类型友元的普通函数。 classStrInt { string_sign; string_num; public: friendStrIntadd(constStrInt&a,constStrInt&b); friendStrIntsub(constStrInt&a,StrInt&b); friendStrIntmul(constStrInt&a,constStrInt&b); friendStrIntdiv(constStrInt&a,constStrInt&b); friendStrIntmod(constStrInt&a,constStrInt&b); }; 当默认创建一个对象时,为了使对象有意义,赋以0值。 StrInt(conststring&a="0"); 又要完成流设备对其对象进行输入输出操作。 friendistream&operator>>(istream&in,StrInt&a); friendostream&operator<<(ostream&out,constStrInt&a); 位数的上限值常量BYTENUM只用于大整数类型,所以应在类型中说明。但是为了避免在实现代码中专门定义和初始化,可以使用枚举的技巧。 enum{BYTENUM=200}; 异常类设计 在strint实现中须判断出错,错误来自乘法超大溢出,除0以及输入非法数字表示。我们设计一个异常类。 classMyExcept { public: virtualstringgetwhat()=0; }; classMyDivideZero:publicMyExcept{ public: stringgetwhat(){return"........";} }; classMyTooLarge:publicMyExcept{ public: stringgetwhat(){return"..........";} }; classMyIllegal:publicMyExcept{ public: stringgetwhat(){return"..........";} }; classMyIlleagalop:publicMyExcept { public: stringgetwhat(){return"..........";} }; (三)应用框架设计 在应用框架设计中涉及大整数类型和异常类型的使用。所以要包括: #include"StrInt.h" #include"MyExcept.h" 根据输入的运算符号选择运算类型: StrInta,b; for(charch;cin>>ch&&ch!='@';) { cin>>a>>b; switch(ch) { case'-':cout<<sub(a,b)<<endl;break; case'+':cout<<add(a,b)<<endl;break; case'*':cout<<mul(a,b)<<endl;break; case'/':cout<<div(a,b)<<endl;break; case'%':cout<<mod(a,b)<<endl;brea