[c++]bigint的运算符重载
答案:3 悬赏:0
解决时间 2021-03-07 08:41
- 提问者网友:江山如画
- 2021-03-06 07:58
貌似是定义有点问题= =|||...还有用friend定义过的函数怎么调用...Orz...
#include "stdafx.h"
#include
#include
#include
using namespace std;
class bigint{
public:
friend bigint operator+(bigint&,bigint&);
friend bigint operator-(bigint&,bigint&):
friend bigint operator*(bigint&,bigint&);
friend bigint operator/(bigint&,bigint&);
//bigint compare();
void control();
void menu();
int input();
int length1();
public:
int a;
};
vectorivec1;
vectorivec2;
vectorivec3;
int length=0;
int length1(){
if(ivec1.size()<=ivec2.size())
length=ivec1.size();
else
length=ivec2.size();
return 0;}
bigint operator+(bigint& temp1,const bigint& temp2) {
//int input();
//int length1();
//for(int i=0;i<=length;i++){
// ivec3[i]=ivec1[i]+ivec2[i];}
return 0;
}
bigint operator-(const bigint& ivec1,const bigint& ivec2){
int input();
int length1();
for(int i=0;i<=length;i++)
{
if(ivec1[i]>=ivec2[i])
{ivec3[i]=ivec1[i]-ivec2[i];}
else{ivec3[i]=ivec1[i]+10-ivec2[i];
ivec1[i+1]=ivec1[i+1]-1;}
if(ivec1.size() {length=ivec1.size();}
else
length=ivec2.size();}
return 0;
}
bigint operator* (const bigint& ivec1,const bigint&ivec2){
int input();
int length1();
for(int i=0;i {for(int j=0;j<=length;j++)
{ivec3[i+j]=ivec1[i]+ivec2[j];}
}
for (int i=0;i if(ivec3[i]>10){
ivec3[i+1]+=ivec1[i]/10;
ivec3[i]%=10;}
}
return 0;}
bigint operator/(const bigint& ivec1,const bigint& ivec2){
int input();
int length1();
for(int i=0;i<=length;i++)
{ivec1[i]-=ivec2[i];
if(ivec1[i]<0){
ivec1[i]+=10;
ivec1[i+1]--;}
}
for(int i=length-1;i>=0;i--)
{if(ivec1[i]>0)
operator/();
return 0;}
}
bigint compare(){
int input();
int length1();
int j=length;
{if(ivec1.size()>ivec2.size())
{cout<<"ivec1比较大"< else
{cout<<"ivec2比较大"< if(ivec1.size()==ivec2.size())
{for(;j>=0;j--){
if(ivec1[j]>ivec2[j])
cout<<"ivec1比较大"< else
cout<<"ivec2比较大"< }
return 0;}
void menu(){
cout<<"1-plus"< cout<<"2-minus"< cout<<"3-multiply"< cout<<"4-divide"< cout<<"5-compare"< cout<<"6-exit"<}
void control(){
int number=0;
menu();
while(cin>>number)
{switch(number){
case 1:
operator+(ivec1,ivec2);
break;
case 2:
operator-(ivec1,ivec2);
break;
case 3:
operator*(ivec1,ivec2);
break;
case 4:
operator/(ivec1,ivec2);
break;
case 5:
compare();
break;
case 6:
exit(0);}
}
}
int input(){
char number;
char number2;
while(cin>>number2)
{ivec2.push_back(number2);}
while (cin>>number)
{ivec1.push_back(number);}
return 0;}
int _tmain(int argc, _TCHAR* argv[])
{
control();
return 0;
}
最佳答案
- 二级知识专家网友:安稳不如野
- 2021-03-06 08:54
你这错的真是离谱啊.
我用模板描述的操作符重载的返回类型,还有,你对操作符重载的概念真的是很混乱,建议你多读几个操作符重载的程序再写吧
#include
#include
#include
using namespace std;
template
class bigint
{
public:
friend T operator+(bigint&,bigint&);
friend T operator-(bigint&,bigint&);
friend T operator*(bigint&,bigint&);
friend T operator/(bigint&,bigint&);
//bigint compare();
void control();
void menu();
int input();
int length1();
public:
int a;
};
vector ivec1;
vector ivec2;
vector ivec3;
int length=0;
int length1()
{
if(ivec1.size()<=ivec2.size())
length=ivec1.size();
else
length=ivec2.size();
return 0;
}
template
T operator+(T& ivec1,T& ivec2)
{
int input();
int length1();
for(int i=0;i<=length;i++)
{
ivec3[i]=ivec1[i]+ivec2[i];
}
return ivec3;
}
template
T operator-(T& ivec1,T& ivec2)
{
int input();
int length1();
for(int i=0;i<=length;i++)
{
if(ivec1[i]>=ivec2[i])
{
ivec3[i]=ivec1[i]-ivec2[i];
}
else
{
ivec3[i]=ivec1[i]+10-ivec2[i];
ivec1[i+1]--;
}
if(ivec1.size()
{
length=ivec1.size();
}
else
length=ivec2.size();
}
return ivec3;
}
template
T operator* (T& ivec1,T& ivec2)
{
int input();
int length1();
for(int i=0;i
{
for(int j=0;j<=length;j++)
{
ivec3[i+j]=ivec1[i]+ivec2[j];
}
}
for (i=0;i
{
if(ivec3[i]>10)
{
ivec3[i+1]+=ivec1[i]/10;
ivec3[i]%=10;
}
}
return ivec3;
}
template
T operator/(T& ivec1,T& ivec2)
{
int input();
int length1();
for(int i=0;i<=length;i++)
{
ivec1[i]-=ivec2[i];
if(ivec1[i]<0)
{
ivec1[i]+=10;
ivec1[i+1]--;
}
}
for(i=length-1;i>=0;i--)
{
if(ivec1[i]>0)
ivec1 / ivec2;
}
return ivec3;
}
void compare()
{
int input();
int length1();
int j=length;
{
if(ivec1.size()>ivec2.size())
{
cout<<"ivec1比较大"<
}
else
{
cout<<"ivec2比较大"<
}
}
if(ivec1.size()==ivec2.size())
{
for(;j>=0;j--)
{
if(ivec1[j]>ivec2[j])
cout<<"ivec1比较大"<
else
cout<<"ivec2比较大"<
}
}
}
void menu()
{
cout<<"1-plus"<
cout<<"2-minus"<
cout<<"3-multiply"<
cout<<"4-divide"<
cout<<"5-compare"<
cout<<"6-exit"<
}
void control()
{
int number=0;
menu();
while(cin>>number)
{
switch(number)
{
case 1:
ivec1+ivec2;
break;
case 2:
ivec1-ivec2;
break;
case 3:
ivec1*ivec2;
break;
case 4:
ivec1/ivec2;
break;
case 5:
compare();
break;
case 6:
exit(0);
}
}
}
int input()
{
char number;
char number2;
while(cin>>number2)
{ivec2.push_back(number2);}
while (cin>>number)
{ivec1.push_back(number);}
return 0;}
int main()
{
control();
return 0;
}
全部回答
- 1楼网友:花一样艳美的陌生人
- 2021-03-06 09:55
问题是很多啊!
friend定义过的函数
bigint A,B,C;
C = A + B ; //加法
- 2楼网友:强势废物
- 2021-03-06 09:42
我太需要学习了,我只知道一个重载,就是typedef.
再看看别人怎么说的。
我要举报
大家都在看
推荐资讯