求一个整数最高位的权c语言,大整数加法求改错(进位时输出少了最高位。。。)...

太忧伤了,所以还是自己找大神解决了:

#include

#include

using namespace std;

#include"conio.h"

//子程序

//表示这是要用链表做的节奏

typedef struct node

{

int data;

struct node *next;

}node,*LinkList;

//单链表的初始化

int InitList(LinkList &L)

{//构造一个空的单链表L

L=new node;//生成新结点作为头结点,用头指针L指向头结点

L->next=NULL;//头结点的指针域置空

return 1;

}

//前插法创建单链表

void CreateList_H(LinkList &L,string s)//这是一个函数

{//逆位序输入n个元素的值,建立带表头结点的单链表L

LinkList p;

int i,a;

for(i=0;i

{

a=s[i]-'0';//将字符转化为数字

p=new node;//生成新结点*p

p->data=a;//输入元素赋值给新结点*p的数据域

p->next=L->next;L->next=p;//将新结点*p插入到头结点之后

}

}

//整数相加

void add(LinkList L1,LinkList L2,LinkList L)

{

LinkList p,p1,p2,o,t;

int d,num;

o=L;

p=L->next;

p1=L1->next;

p2=L2->next;

d=0;

//因为前插法是倒序,故,当L1,L2第一个都是数字的时候

while(p1&&p2)

{

num=p1->data+p2->data+d;//L1和L2第一个数字相加考虑进位

d=num/10;//进位时的那个1

num=num%10;//留下进入L的数字

p->data=num;

p1=p1->next;

p2=p2->next;

p=p->next;

o=o->next;

}

//当加到后来有一个数已经加完了,然后另一个数还有的状态。考虑进位。

while(d&&p)

{

num=p->data+d;//由于上面已经把剩下的那个数给了L,所以用p->data。

d=num/10;

num=num%10;

p->data=num;

p=p->next;

}

//如果两边都加完了,就剩下一个可以进位的数字d

if(d)

{

t=new node;//再开出一个结点来存放进位的d,但是看上一段程序可知已经到了p->next

t->data=d;//那最后一个q,即r的数值就等于d

t->next=NULL;//然后r的后面的后面就没有数字了

o->next=t;

}

}

//逆置

void inverse(LinkList &L)

{

LinkList p,q,r;

p=L;

q=L->next;

p->next=NULL;

while(q)

{

r=q->next;

q->next=p->next;

p->next=q;

q=r;

}

}

//输出相加后的结果链表L

void output(LinkList L)

{

LinkList p;

p=L->next;

while(p!=NULL)

{

cout<data;

p=p->next;

}

cout<

}

//主程序

int main()

{

int T,k;

cin>>T;

for(k=0;k

{

string s1,s2;

cin>>s1;

cin>>s2;

LinkList L1,L2,L;

InitList(L1);

InitList(L2);

InitList(L);

CreateList_H(L1,s1);

CreateList_H(L2,s2);

L=s1.size()>s2.size()?L1:L2;

add(L1,L2,L);

inverse(L);

output(L);

}

return 0;

}

13a2f4bd84d8af35e7645442bb7a26a3.gif你猜会不会有人搜到它↑↑↑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值