数据结构 第二章 顺序表应用举例——大整数求和

一、问题描述

C/C++语言中的int类型能表示的整数范围是-2^31~2^31-1,unsigned int类型能表示的整数范围是0~2^32-1,即0~4 294 967 295,所以,int和unsigned int类型都不能存储超过10位的整数。有些问题需要处理的整数远远不止10位,这种大整数用C/C++语言的基本数据类型无法直接表示。请编写算法完成两个大整数的加、减、乘和除等基本代数运算。

二、基本要求

①大整数的长度在100位以下;

②设计存储结构表示大整数;

③设计算法实现两个大整数的加、减、乘和除等基本的代数运算;

④分析算法的时间复杂度和空间复杂度。

三、问题分析

因为C++中的基本类型无法保存100位的整数,所以需要自定义一个类来保存。由整数的性质可知,一个整数由在其各个位上的元素构成,每个元素之间仅有前后关系。用线性表就能很好的的表示大整数的逻辑结构。

从大整数的代数运算方面来看,各种运算仅会影响元素本身、元素的邻位(进位、退位),没有中间插入元素的操作。元素的个数上限也是事先规定好的。因此,用顺序表表(数组)作为其存储结构。

四、数据类型定义

头文件LongInt.h

#ifndef LongInt_H
#define LongInt_H
const int MaxSize = 100;
class LongInt
{
public:
	LongInt(){ length = 0; }
	LongInt(int a[], int n);                  //构造函数
	~LongInt(){};                         
	friend LongInt Add(LongInt a, LongInt b); //加法函数
	void PrintList();                         //输出结果
private:
	int data[MaxSize];
	int length;
};
#endif

 

 

 

 

五、C++代码段

源码文件LongInt.cpp

#include 
#include 
#include "LongInt.h"
using namespace std;

//构造函数,将存入的大整数的高位置入自定义类型数组的低位
//主要其倒置数组的作用
LongInt::LongInt(int a[], int n)
{
	length = n;
	if (length > MaxSize)throw"参数非法";
	n--;
	for (int i = 0; i < length; i++)
	{
		data[n - i] = a[i];
	}
}

//加法函数,实现两个大整数相加,处理进位
LongInt Add(LongInt A, LongInt B)
{
	int flag = 0,i = 0,n,m;
	LongInt C;
	n = A.length;
	m = B.length;
	while (i -1; i--)
		cout << data[i];
	cout << endl;
}

 
  

 

源码文件LongInt_main.cpp

#include 
#include 
#include "LongInt.h"
using namespace std;

int main()
{
	string a, b;
	int ai[MaxSize],bi[MaxSize];
	cout << "请输入第一个大整数" << endl;
	cin >> a;
	cout << "请输入第二个大整数" << endl;
	cin >> b;
	int lena = a.size();
	int lenb = b.size();
	for (int i = 0; i < lena; i++) //将两个字符串转换为整型数组
	{
		ai[i] = a[i]-48;
	}
	for (int i = 0; i < lena; i++)
	{
		bi[i] = b[i]-48;
	}
	LongInt A(ai, lena), B(bi, lenb);
	LongInt C;
	C=Add(A,B);              //进行加法运算                   
	cout << "结果为" << endl;
	C.PrintList();           //输出结果
	return 0;
}


 

六、运行结果

进行40位,无进位,两相加数位数相等运算

数据结构 第二章 顺序表应用举例——大整数求和_第1张图片


 


 

 

进行50位,有进位,两相加数位数相等运算

数据结构 第二章 顺序表应用举例——大整数求和_第2张图片


 

 

 

 

 

进行100位,有进位,两相加数位数不相等运算

数据结构 第二章 顺序表应用举例——大整数求和_第3张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

七、总结

目前仅实现了大整数加法,且出现了Bug。有空再实现其余代数运算并DeBug。

 

你可能感兴趣的:(数据结构,编程实验)