dhu编程练习

这篇博客介绍了如何使用双向链表来存储和进行长整数的加法运算。问题描述中提到,两个任意长度的整数x和y分别由双向链表A和B存储,算法需要从链表尾部开始进行加法操作,结果存储在链表C中。输入包括两个长整数,输出是格式化的长整数和计算结果链表。文章提供了输入输出示例及代码实现。
摘要由CSDN通过智能技术生成

9 长整数加法运算

1.问题描述
假设2个任意长度的整数x、y分别由双向链表A和B存储,现要求设计一个算法,实现x+y。计算结果存储在链表C中。

说明:

由于A和B输出时需要从头至尾遍历,而做加法时需要从尾至头遍历,因此使用双向链表存储。

可以从长整数的低位开始拆分(4位为一组,即不超过9999的非负整数),依次存放在链表的每个结点的数据域中;头结点的数据域存放正负数标志(正数或0:1,负数:-1)。

2.输入说明
第一行:长整数x

第二行:长整数y
3.输出说明
第一行:格式化后的长整数x(从低位到高位每4位用","分开)

第二行:格式化后的长整数y(从低位到高位每4位用","分开)

第三行:空行

第四行:单链表C的遍历结果

第五行:格式化后的计算结果(从低位到高位每4位用","分开)

(输入与输出之间用一空行分隔)

4.范例
输入
-53456467576846547658679870988098
435643754856985679
输出
-5345,6467,5768,4654,7658,6798,7098,8098
43,5643,7548,5698,5679

5345->6467->5768->4611->2014->9250->1400->2419
-5345,6467,5768,4611,2014,9250,1400,2419
5.代码

#include <iostream>
#include <string> //cin>>s1>>s2;
#include <math.h>
#include<algorithm>  //使用reverse()函数
using namespace std;

//头结点的数据域存放正负数标志(正数或0:1,负数:-1)  head->num=1(0或者正数)
struct node {
           
	int num;
	struct node* pre;
	struct node* next;
};

struct node* create(string s) {
      //由于链表从尾部到头部相加,所以结果采用头插法插入

	//1.新建头结点并初始化
	struct node* head = new node;
	head->next = NULL;
	head->pre = NULL;

	//2.计算链表真正长度
	int len=s.length();

	if (s[len - 1] == '-') {
   
		len = s.length() - 1;
		head->num = -1;
	}
	else {
   
		len = s.length();
		head->num = 1;
	}
	//3.进行相加工作,num保存结果数值,cnt用于控制每四位相加
	int cnt = 0;
	int num = 0;
	for (int i = 0; i < len; i++) {
   

		//num += (int)(s[i] - '0') * (pow(10, cnt) + 0.1);//此处改成num +=(s[i] - '0') * pow(10, cnt);
		num += (s[i] - '0') * pow(10,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值