鱼C论坛

 找回密码
 立即注册
查看: 172|回复: 1

用单链表实现两个大整数的相加运算

[复制链接]
最佳答案
0 
发表于 2018-12-4 17:44:29 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 开心丶 于 2018-12-4 17:50 编辑

用单链表实现两个大整数的相加运算
(1)将用户输入的十进制整数字符串转化为带头结点的单链表,每个节点存放一个整数位。
(2)求两个整数单链表相加的结果单链表
(3)求结果单链表的中间位,如123的中间位位2、1234的中间位为2。



很急,麻烦大佬了。

微信截图_20181204173948.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
15 
发表于 前天 11:46 | 显示全部楼层
本帖最后由 理想小青年 于 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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-12-16 07:04

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表