大整数加减法
第一次写,涉及大整数加减运算
先来看看加法,主要思想是逐位相加,进位加1
#include <iostream>
#include <cstring>
using namespace std;
void add(int a[], int b[],string str1, string str2)
{
int i, j=0;
for (i = str1.length() - 1;i >= 0;i--)
a[j++] = str1[i] - '0';
j = 0;
for (i = str2.length() - 1;i >= 0;i--)
b[j++] = str2[i] - '0';
for (i = 0;i < 200;i++) //假设正整数最长为200位,根据实际需要调整
{
a[i] += b[i];
if (a[i] >= 10) //如果大于等于10则有进位
{
a[i] -= 10; //本位减10
++a[i + 1]; //下一位加1
}
}
}
void print(int* a) //输出控制,多余的0不要输出
{
int flag = 0;
for (int i = 200;i >= 0;i--)
{
if (flag == 1)
cout << a[i];
else if (a[i] != 0)
{
cout << a[i];
flag = 1;
}
}
if (flag == 0)
cout << '0';
}
int main()
{
string str1, str2;
int a[300] = { 0 }, b[300] = {0};
//memset(a,0,sizeof(a)); //如此赋0也可以
//memset(b,0,sizeof(b));
cin >> str1 >> str2;
add(a,b,str1,str2);
print(a);
return 0;
}
再来看看减法,默认第一个数大于第二个数。
主要思想是逐位相减,不够减借一。
#include <iostream>
#include <cstring>
using namespace std;
void sub(int a[], int b[], string str1, string str2)
{
int i, j = 0;
for (i = str1.length() - 1;i >= 0;i--)
a[j++] = str1[i] - '0';
j = 0;
for (i = str2.length() - 1;i >= 0;i--)
b[j++] = str2[i] - '0';
for (i = 0;i < 200;i++) //假设正整数最长为200位,根据实际需要调整
{
a[i] -= b[i];
if (a[i] < 0) //如果小于0则有借位
{
a[i] += 10; //本位借10
--a[i + 1]; //下一位减1
}
}
}
void print(int* a) //输出控制,多余的0不要输出
{
int flag = 0;
for (int i = 200;i >= 0;i--)
{
if (flag == 1)
cout << a[i];
else if (a[i] != 0)
{
cout << a[i];
flag = 1;
}
}
if (flag == 0)
cout << '0';
}
int main()
{
string str1, str2;
int a[300] = { 0 }, b[300] = { 0 };
cin >> str1 >> str2;
sub(a, b, str1, str2);
print(a);
return 0;
}