⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 大数相加-ii.cpp

📁 大数相加的程序...............
💻 CPP
字号:
#include<iostream>
using namespace std;
struct DCLinkNode			//双向链表的结点
{
	int data;
	DCLinkNode *right,*left;
};
class DCLinkList			//双向链表
{
public:
	DCLinkNode*tail,*currptr;
	DCLinkList()
	{
		tail=currptr=new DCLinkNode;
		tail->left=tail->right=tail;
		tail->data=1;
	}
	void InsterTail(int x);		//尾插入
	void InsterHead(int x);		//头插入
	void DelNode(DCLinkNode*temp);		//删除结点
};
				//尾插入
void DCLinkList::InsterTail(int x)
{
	currptr=new DCLinkNode;
	currptr->data=x;
	currptr->left=tail;
	currptr->right=tail->right;
	tail->right->left=currptr;
	tail->right=currptr;
	tail=currptr;
}
				//头插入
void DCLinkList::InsterHead(int x)
{
	currptr=new DCLinkNode;
	currptr->data=x;
	currptr->left=tail->right;
	currptr->right=tail->right->right;
	tail->right->right->left=currptr;
	tail->right->right=currptr;
	if(tail->right==currptr)
		tail=currptr;
}
			//删除结点
void DCLinkList::DelNode(DCLinkNode*temp)
{
	temp->left->right=temp->right;
	temp->right->left=temp->left;
	temp->left=temp->right=temp;
	delete temp;
}
				//输入大数
void InputNum(DCLinkList &X)
{
	char ch=0;
	X.InsterTail(0);
	cin>>ch;
	while(ch!=';')
	{
		if(ch=='-')
		{
			X.tail->right->data=-1;
		}
		if(ch==',')
		{
			X.InsterTail(0);
		}
		if(ch>='0'&&ch<='9')
		{
			X.currptr->data=X.currptr->data*10+(int(ch)-48);
		}
		cin>>ch;
	}
//	cout<<endl;
}
			//大数取反
void Neg_Num(DCLinkList &X)
{
	for(X.currptr=X.tail->right->right;X.currptr!=X.tail->right;X.currptr=X.currptr->right)
		X.currptr->data=0-X.currptr->data;
}
			//主函数
int main()
{
	DCLinkList A,B,C;
	cout<<"输入第一个数A:";
	InputNum(A);
	if(A.tail->right->data==-1)
		Neg_Num(A);
	cout<<"输入第二个数B:";
	InputNum(B);
	if(B.tail->right->data==-1)
		Neg_Num(B);
//以下是大数相加的过程
	A.currptr=A.tail;
	B.currptr=B.tail;
	while((A.currptr!=A.tail->right)&&(B.currptr!=B.tail->right))
	{
		C.InsterHead((A.currptr->data)+(B.currptr->data));
		A.currptr=A.currptr->left;
		B.currptr=B.currptr->left;
	}
	if(B.currptr!=B.tail->right)  //B长于A的时候
	{
		while(B.currptr!=B.tail->right)
		{
			C.InsterHead(B.currptr->data);
			B.currptr=B.currptr->left;
		}
	}
	else if(A.currptr!=A.tail->right)  //A长于B的时候
	{
		while(A.currptr!=A.tail->right)
		{
			C.InsterHead(A.currptr->data);
			A.currptr=A.currptr->left;
		}
	}
	DCLinkNode *temp;
	C.currptr=C.tail->right->right;
	while(C.currptr->data==0)		//削去顶头的‘零’
	{
		temp=C.currptr;
		C.currptr=C.currptr->right;
		C.DelNode(temp);
	}
//以下是数字的按位整理
	if(C.tail->right->right->data<0)
	{
		C.tail->right->data=-1;
		Neg_Num(C);
	}
	for(C.currptr=C.tail;C.currptr!=C.tail->right->right;C.currptr=C.currptr->left)
	{
		if(C.currptr->data>=10000)
		{
			C.currptr->data=C.currptr->data-10000;
			C.currptr->left->data++;	
		}
		if(C.currptr->data<0)
		{
			C.currptr->left->data--;
			C.currptr->data=10000+C.currptr->data;
		}
	}
//输出结果C
	cout<<"计算的结果是:";
	if(C.tail->right->data==-1)cout<<"-";
	for(C.currptr=C.tail->right->right;C.currptr!=C.tail->right;C.currptr=C.currptr->right)
	{
		if(C.currptr->data<10)
			cout<<"000"<<C.currptr->data<<",";
		else 
			if(C.currptr->data<100)
				cout<<"00"<<C.currptr->data<<",";
		else
			if(C.currptr->data<1000)
				cout<<"0"<<C.currptr->data<<",";
		else cout<<C.currptr->data<<",";
	}
	cout<<endl;
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -