#include <iostream>
#include <cstring>
#define MAX 100
using namespace std;
void addStr(const char* num1, const char* num2, char sum[])
{
int len1 = strlen(num1);
int len2 = strlen(num2);
for (int i = 0; i < MAX; i++)
sum[i] = '0';
//每一位都初始化为'0'
int len = (len1 > len2) ? len1 : len2;
//len表示较长的大数位数
if (len1 < len2)
for (int i = 1; i <= len2 - len1; i++)
sum[i] = sum[i] + num2[i - 1] - '0';
//注意sum[0]仍为'\0'以供carry
else if (len1 > len2)
for (int i = 1; i <= len1 - len2; i++)
sum[i] = sum[i] + num1[i - 1] - '0';
for (int f1 = len1 - 1, f2 = len2 - 1, f = len; f1 >= 0 && f2 >= 0; f1--, f2--, f--)
{
char temp = sum[f] + num1[f1] - '0' + num2[f2] - '0';
if (temp <= '9')
sum[f] = temp;
else
{
sum[f] = temp - 10;
int j = f - 1;
sum[j]++;
while (sum[j] == '9' + 1)
{
sum[j] = '0';
sum[j - 1]++;
j--;
}
}
}
if (sum[0] == '0')
{
for (int i = 0; i < len + 1; i++)
sum[i] = sum[i + 1];
sum[len] = '\0';
}
else
sum[len + 1] = '\0';
cout << num1 << " + " << num2 << " = " << sum << endl;
}
int main()
{
char number1[MAX];
char number2[MAX];
char sum[MAX];
cout << "请输入第一个大数:";
cin >> number1;
int i = 0;
while (number1[i] != '\0')
{
if (number1[i] < '0' || number1[i] > '9')
{
cout << "输入错误!" << endl << "请重新输入:";
cin >> number1;
i = -1;
}
i++;
}
cout << "请输入第二个大数:";
cin >> number2;
int j = 0;
while (number2[j] != '\0')
{
if (number2[j] < '0' || number2[j] > '9')
{
cout << "输入错误!" << endl << "请重新输入:";
cin >> number2;
j = -1;
}
j++;
}
addStr(number1, number2, sum);
return 0;
}
两个超大整数相加之数组实现
最新推荐文章于 2022-08-16 14:13:19 发布