中易网

[c++]bigint的运算符重载

答案:3  悬赏:0  
解决时间 2021-03-07 08:41
貌似是定义有点问题= =|||...还有用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;
}
最佳答案
你这错的真是离谱啊.
我用模板描述的操作符重载的返回类型,还有,你对操作符重载的概念真的是很混乱,建议你多读几个操作符重载的程序再写吧

#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;
}
全部回答
问题是很多啊! friend定义过的函数 bigint A,B,C; C = A + B ; //加法
我太需要学习了,我只知道一个重载,就是typedef. 再看看别人怎么说的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
前男友来看我,走了感觉好空虚.
火凤凰网吧怎么去啊,有知道地址的么
虾仁能和莲角一起吃吗?
数字谜语谁知道以下数字代表的意思???(964369
独木舟的简介
帝王般享受1男挑5女,让单身的人怎么活
户口是常德,请问我定居在长沙,想在长沙交医
雅马哈迅鹰和豪爵天鹰对比那款好?
电源有电,可是插入插头跳闸是什么问题啊,且
广林茶行在什么地方啊,我要过去处理事情
激光器应用中如果不使用场镜有什么影响
上班时间统一收手机合法吗
董旺鲜花水果行在哪里啊,我有事要去这个地方
我的肛门附近有裂口,时常发痒,请哪位替我看
p9怎么退回以前的版本
推荐资讯
买安置房,在房产证没下来前,如果房主死去,怎
腌好的骨肉相连怎么烧烤,要刷油吗,还是直接
海宁市许村镇李峰轮胎店在哪里啊,我有事要去
人为什么没人理自己?
断桥铝门窗哪个牌子好些,中德蓝卡好不好?
X183/Y250(路口)这个地址在什么地方,我要处
青忆聚点我想知道这个在什么地方
已知机器工作时,每小时耗油9KG,现油箱中存
台式电脑风扇怎么清洁
东方时尚科目二5次不过
奥斌文化我想知道这个在什么地方
特拉法尔加·罗最后是如何治好珀铅病
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?