用单链表实现两个大整数的相加运算
本帖最后由 开心丶 于 2018-12-4 17:50 编辑用单链表实现两个大整数的相加运算
(1)将用户输入的十进制整数字符串转化为带头结点的单链表,每个节点存放一个整数位。
(2)求两个整数单链表相加的结果单链表
(3)求结果单链表的中间位,如123的中间位位2、1234的中间位为2。
很急,麻烦大佬了。 本帖最后由 理想小青年 于 2018-12-14 11:49 编辑
有意思,没有时间去实现,思路如下:
1、输入整数(十进制), 取每一个数值,可以左到右依次,循环添加节点,每一个节点保存一个拆分开的数值。
AllocListNode(元素个数);假设根据这个函数已经提前申请好了链表空间。函数是自己实现。
for(int i = 0 ; i < 链表长度, ++i)
{
pLink->Data = 拆分的第一个数值;
++pLink;
}
2、进行链表运算, 节点循环相加(取链表中保存数据的值)。两个链表相加意思理解的模糊,应该是每个节点相加。
for(int i = 0 ; i < 链表长度, ++i)
{
// 1. 把数据累计相加到数组里面 应该不是这个意思?
Number = pLink->Data + pLink1->Data;
// 2. 或者就是把数组保存到数组,在进行相加
Number = pLink->Data;
Number1 = pLink1->Data;
// 这样就可以链表还原数值,比如输入的数值如123或者123456 当两个链表大小不一样时候 不可以在一个循环内
++pLink;
++pLink1;
}
然后累计相加,办法可能有点笨
3、求中间位这个更快,可以定义变量记录一下链表中元素,也可以遍历链表得到一共几个元素,元素个数找中间点(偶数运算结果 - 1,奇数运算结果不做优化),即可符合题意。
for(int i = 0 ; i < 链表长度; ++i)
{
if(查询的中间数 == i)
break;
pLink++;
}
// 根据偶数、奇数进行优化
// 返回数据
return pLink->Data;
页:
[1]