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;} 测试:
新闻热点
疑难解答