长双整数类(重载运算符)
1.题目
1.1存储结构
用有序长整数对表示长双整数(8字节有符号整数,负数用补码表示):
高4字节 |
低4字节 |
h |
l |
其中,高4字节为有符号长整数(long),低4字节为无符号长整数(unsigned long)。
1.2输入形式
按字符串输入十进制整数。
1.3基本操作
⑴重载单目运算符+、-和双目运算符+、-、*、/、%,分别用于长双整数的相应算术运算。
⑵重载运算符>>和<<,分别用于输入和输出长双整数。
……
2.概要设计
2.1存储结构
typedef struct{
long h;
unsigned long l;
}Long;
2.2基本操作
Long operator + (Long i)
算法:返回i。
Long operator - (Long i)
算法:①对i按位取反(i.h=~i.h,i.l=~i.l);②i加1(如果++i.l为0,则++i.h);③返回i。
……
istream &operator >> (istream &istr,Long &i)
算法:①令i=0(i.h=i.l=0);②读入1个字符c,如果c=='-',令f=1,并再读入1个字符c,否则,令f=0;③如果c是十进制数字('0'<=c&&c<='9'),重复执行i=i*10+c-'0'和读入1个字符c;④如果f则i=-i;⑤返回istr。
ostream &operator << (ostream &ostr,Long i)
算法:①如果i.h为负数,输出负号-,并改变i的符号(i=-i);②如果i.h不等于0,输出i.h;③输出i.l;④返回ostr。
……
2.3主函数
显示一个文字菜单,实现菜单中的相应功能。
3.详细设计
//长双整数类(重载运算符)
//预处理
#include<iostream.h>
#include<conio.h>
//……
//存储结构
typedef struct{
long h;
unsigned long l;
}Long;
//基本操作
//……
void main(){
int choose=0;
Long i,i1,i2;
while(1){
clrscr();
cout<<"1.输入长双整数1\n";
cout<<"2.输入长双整数2\n";
cout<<"3.长双整数相加\n";
//……
cout<<"9.结束\n\n";
cout<<"请选择:";
cin>>choose;
switch(choose){
case 1:
//cout<<"请输入长双整数1:\n"; cin>>i1;
break;
case 2:
//cout<<"请输入长双整数2:\n"; cin>>i2;
break;
case 3:
//cout<<"\n("<<i1<<")+("<<i2<<")="<<i1+i2;
break;
//……
case 9:
clrscr();
cout<<"\n\n\n\n\n\n\n\n\t\t\t\t\t再见!"; getch();
return;
}
cout<<"\n\n按任意键继续……"; getch();
}
}
4.测试结果
……
还请各大侠多多帮助哦!!!小弟不胜感激!!!!!