大整数加法
# include <iostream>
using namespace std;
template<typename T>
int count(T& x)
{
int s1 = sizeof(x);
int s2 = sizeof(x[0]);
int result = s1 / s2;
return result;
}
void add(int a[],int b[],int alength,int blength) {
int *p;
int m = 0;
int n = 0;
int flag = 0;
//在初始分配结果p数组长度多与最长长度保存进位
if (alength >= blength) {
p = new int[alength + 1]{ 0 };
m = blength;
n = alength + 1;
}
else {
p = new int[blength + 1]{ 0 };
m = alength;
n = blength + 1;
}
//同有位置的加法
for (int i = 0; i < m; i++) {
p[i] = (a[i] + b[i] + flag)%10;
flag = (a[i] + b[i] + flag) / 10;
}
//多余位置的加法
if (alength >=blength) {
for (int i = m; i < alength ; i++) {
p[i] = (a[i] + flag) % 10;
flag = (a[i] + flag) / 10;
}
if (flag != 0) {
p[alength] = flag;
cout << "结果长度:" << (alength + 1) << endl;
for (int i = 0; i < alength + 1; i++)
cout << p[i] << " ";
}
else {
cout << "结果长度:" << alength << endl;
for (int i = 0; i < alength ; i++)
cout << p[i] << " ";
}
}
if (blength > alength) {
for (int i = m; i < blength; i++) {
p[i] = (b[i] + flag) % 10;
flag = (b[i] + flag) / 10;
}
if (flag != 0) {
p[blength] = flag;
cout << "结果长度:" << (blength + 1) << endl;
for (int i = 0; i < blength + 1; i++)
cout << p[i] << " ";
}
else {
cout << "结果长度:" << blength << endl;
for (int i = 0; i < blength; i++)
cout << p[i] << " ";
}
大整数减法
# include <iostream>
using namespace std;
template<typename T>
int count(T& x)
{
int s1 = sizeof(x);
int s2 = sizeof(x[0]);
int result = s1 / s2;
return result;
}
void reduce(int a[], int b[], int alength, int blength) {
int m = 0;
int n = 0;
int length = 0;
int *p = new int[alength]{ 0 };
length = alength;
m = blength;
for (int i = 0; i <blength; i++) {
if (a[i] >= b[i])
p[i] = a[i] - b[i];
else {
n = i;
//实现连环借位方法
while (1) {
if (a[i + 1] != 0) {
a[i + 1] = a[i + 1] - 1;
break;
}
else {
a[i + 1] = 9;
i = i + 1;
}
}
i = n;
p[i] = 10 - b[i] + a[i];
}
}
//解决a数组多出来部分赋值问题,并第一次次排除头为0的问题
for (int i = alength-1; i >=blength; i--) {
if (a[i] != 0) {
p[i] = a[i];
break;
}
else
length--;
}
for (int i = blength; i < length-1; i++) {
p[i] = a[i];
}
//第二次彻底解决头为0的问题出现低二次原因是第一次在解决头出现问题仅仅解决的是a数组赋值有0情况。
for (int i = length-1; i >= 0; i--) {
if (p[i] == 0)
length--;
else
break;
}
cout << "结果长度:" << length << endl;
for (int i = 0; i < length ; i++)
cout << p[i] << " ";
delete[]p;
delete p;
}
void main() {
int alength = 0;
int blength = 0;
int *a;
int *b;
cout << "输入长度alength:";
cin >> alength;
a = new int[alength] {0};
for (int i = 0; i < alength; i++) {
cin >> a[i];
}
cout << "输入长度blength:";
cin >> blength;
b = new int[blength] {0};
for (int i = 0; i < blength; i++) {
cin >> b[i];
}
reduce(a, b, alength, blength);
delete[]a;
delete[]b;
delete a;
delete b;
}
}
delete []p;
delete p;
}
void main() {
int alength = 0;
int blength = 0;
int *a;
int *b;
cout << "输入长度alength:";
cin >> alength;
a = new int[alength] {0};
for (int i = 0; i < alength; i++) {
cin >> a[i];
}
cout << "输入长度blength:";
cin >> blength;
b = new int[blength] {0};
for (int i = 0; i < blength; i++) {
cin >> b[i];
}
add(a, b, alength, blength);
delete[]a;
delete[]b;
delete a;
delete b;
}