首页 > 学院 > 开发设计 > 正文

用数组存储大整数,实现大整数的加法

2019-11-06 09:21:00
字体:
来源:转载
供稿:网友

                                   实现大整数的加法

                              

                  C/C++中的int类型能表现的范围是-2E31-2E31–1。unsigned类型能表现的范围是0-2E32–1,即 0-4294967295。所以,int和unsigned类型变量,都不能保存超越10位的整数。有时我们须要介入运算的数,可能会远远不止10 位,例如,可能须要保存小数点前面100位(比如求π的值),那么,即便使用能表现很大数值范围的double变量,但是由于double变量只有64位,所以还是不可能到达准确到小数点前面100位这样的精度。

       double变量的精度也不足以表现一个100位的整数。一般我们称这类基本数据类型无法表现的整数为大整数。如何表现和存放大整数呢?基本的思想就是:用数组存放和表现大整数。一个数组元素,存放大整数中的一位。——引用自互联网

                              代码:

#include <iostream>using namespace std;void Set(int n,int m,int A[],int B[])//大数存进数组,个位是[0]的位置{	for (int i = n-1; i >= 0; i--)		cin >> A[i];	for (int i = m - 1; i >= 0; i--)		cin >> B[i];}void Add(int A[], int B[],int n,int m)//计算对应位的结果{	int C[100];//存储和	int min = 0;//位数大小标志	int max = 0;	int PRocess = 0;//存储中间进位和最终进位	if (n > m)	{		min = m;		max = n;	}	else	{		min = n;		max = m;	}	A[max] = 0;	B[max] = 0;	for (int i = 0; i < min; i++)	{		int remain = (A[i] + B[i] + process) % 10;//余数		C[i] = remain;		process = (A[i] + B[i] + process) / 10;//进位	}	for (int i = min; i <= max; i++)	{		if (max == n)		{			C[i] = (A[i]+process)%10;			process = (A[min] + process) / 10;		}		else if(max == m)		{  			C[i] = (B[i] + process) % 10;			process = (B[min] + process) / 10;		}	}	//输出和(C数组)	for (int i = max; i >= 0; i--)		cout << C[i] << "";}int main(){	int A[100];	int B[100];	int n = 0, m = 0;	cin >> n >> m;	Set(n, m, A, B);	Add(A, B, n, m);	system("pause");	return 0;}          测试:


上一篇:jvm了解

下一篇:业内低功耗CC3200模块

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表