长整数四则运算_双向循环链表

本文介绍了如何使用双向循环链表来实现长整数的四则运算,特别是加法运算。基本要求是在每个节点中存储不超过9999的非负整数,整个链表作为万进制数。程序设计要考虑长整数的符号表示,并确保不破坏原始数据链表。给出了VS2019环境下实现此类运算的代码提示。
摘要由CSDN通过智能技术生成

长整数四则运算_双向循环链表

长整数四则运算_双向循环链表

[ 问题描述 ]
设计程序实现两个任意长整数的求和运算。
[ 基本要求 ]
利用双向循环链表实现长整数的存储, 每个结点含一个整型变量. 任何整型变量的范围是 -(215-1)~(215-1)。输入和输出形式: 按中国对于长整数的表
示习惯, 每四位一组,组间用逗号隔开。
[ 测试数据 ]
(1) 0;0;应输出"0"。
(2) -2345,6789;-7654,3211; 应输出"-1,0000,0000"。
(3) -9999,9999; 1,0000,0000,0000; 应输出"9999,0000,0001"。
(4) 1,0001,0001; -1,0001,0001; 应输出"0"。
(5) 1,0001,0001; -1,0001,0000; 应输出"1"。
[ 实现提示 ]
(1) 每个结点可以存放的最大整数为 215-1 = 32767 才能保证两数相加不会溢出。但若这样存,即相当于按 32768 进制数存,在十进制数与32768 进制数间
的转换十分不方便,故可以在每个结点中仅存十进制数的4 位,即不超过9999的非负整数, 整个链表被视为万进制。
(2)可以利用头结点数据域的符号代表长整数的符号。 用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数
组中是简化程序结构的一种方法。不能给长整数位数规定上限。

vs2019代码

代码片.

// An highlighted block
// ConsoleApplication10.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

typedef struct Node {
   
	int num;
	struct Node* prior;
	struct Node* next;

}list;

char init(list* body, char ch, int ten) {
   
	
	if (ch == ',') {
   
		return',';
	}
	else if (ch >= '0' && ch <= '9')
	{
   
		
		int x = int(ch - '0');
		body->num = body->num + x * ten;
		
		scanf_s("%c",&ch);
		if (ch == ',')body->num /= ten;
		if (ch == ';') {
   
			body->num /= ten;
			return ';';
		}
		ten /= 10;
		init(body, ch, ten);
	}

}

list * xiangjia(list * head, list * head1, list * head2) {
   
	int a1 = head1->num;
	int a2 = head2->num;
	int flag=1;
	while (head1->next!=NULL)
	{
   
		head1 = head1->next;
	}
	while (head2->next != NULL)
	{
   
		head2 = head2->next;
	}
	while (head1->prior != NULL && head2->prior != NULL)
	{
   
		head->num = a1*(head1->num) + a2*(head2->num) + head->n
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值