当前位置:首页 > 数据结构长整数四则运算
p3=p3->next; delete currptr; }
// delete p1; // delete p2; // delete p3; }
void LinkList::Creat(string a) //引入字符串,创立两
//个链表,分别表示两个整数
{
int i=0,j=0,m=0,n=0,k=0,l=0,s=0,w=0;
//i记录字符串,j记录加数节点数;s记录被加数节点数 //w标记字符串中的‘-’号
//k记录字符串中的字符转化为整数的值,l使每个节点记录4位 while(a[m]!=';') m++; //m记录字符串中被加数的字符数 n=m;
while(a[n]!='\\0') n++; //n记录字符串的总字符数 if(a[0]=='-') {
head0->data=(-1); //记录整数符号 w=1; } else { }
for(i=m-1;i>=w;i--) {
if(a[i]!=',') //把字符转化为整数
head0->data=1;
{
k+=(a[i]-'0')*sum(l); l++; }
if(a[i]==','||i==w) {
currptr=new LinkNode; //把整数存到双向循环链表中 currptr->data=k; currptr->next=head0; currptr->pre=head0->pre; head0->pre->next=currptr; head0->pre=currptr; head0=currptr;
s++; //节点数加1 k=0; //重新初始化k和l l=0; } }
head0->pre->data*=s; //存储整数符号和节点数
//与建第一个整数链表一样,建立第二个整数链表head1 k=0;l=0; if(a[m+1]=='-') {
head1->data=(-1); m++; } else
head1->data=1; for(i=n-1;i>m;i--)
{
if(a[i]!=',') {
k+=(a[i]-'0')*sum(l); l++; }
if(a[i]==','||i==m+1) {
currptr=new LinkNode; currptr->data=k; currptr->next=head1; currptr->pre=head1->pre; head1->pre->next=currptr; head1->pre=currptr; head1=currptr; j++; k=0; l=0; } }
head1->pre->data*=j; }
void LinkList::Add() //实现两个整数相加 {
LinkNode *temp;
if(abs(head0->pre->data)>abs(head1->pre->data)) //两个整数中,绝对值大的为被加数 addtwo();
else if(abs(head0->pre->data)
{
temp=head0; head0=head1; head1=temp; addtwo(); }
else if(abs(head0->pre->data)==abs(head1->pre->data)) {
int k1,k2;
LinkNode *p=head0,*q=head1; //如果节点数相同,则判断节点中数值大小
while(p->data==q->data&&p!=head0->pre->pre&&q!=head1->pre->pre) {
p=p->next; q=q->next; }
k1=p->data; k2=q->data; if(k1>k2) addtwo(); else {
temp=head0; head0=head1; head1=temp; addtwo(); } } }
共分享92篇相关文档