两个大数相加,暂时选择简单版本,使用两个正整数相加,直接上代码了,不再啰嗦了。
#include <iostream>
#define MAXNUM 10000
bool inspectCharValid(char* value);
void add(char* num1, char* num2, char* result);
int main(int argc, char* argv[])
{
char num1[MAXNUM] = {0};
char num2[MAXNUM] = {0};
std::cout << "请输入一个正整数:" << std::endl;
std::cin >> num1;
if (!inspectCharValid(num1))
{
std::cout << "输入的整数不符合要求." << std::endl;
return -1;
}
std::cout << "请输入一个正整数:" << std::endl;
std::cin >> num2;
if (!inspectCharValid(num1))
{
std::cout << "输入的整数不符合要求." << std::endl;
return -1;
}
char result[MAXNUM] = {0};
add(num1, num2, result);
std::cout << "两个整数相加结果: " << result << std::endl;
return 0;
}
bool inspectCharValid(char* value)
{
for (int i = 0; *(value + i); ++i)
{
if (*(value + i ) < '0' || *(value + i) > '9')
{
return false;
}
}
return true;
}
void add(char* num1, char* num2, char* result)
{
int sum = 0;
int carry = 0;
int len1 = strlen(num1);
int len2 = strlen(num2);
int maxLen = len1 > len2 ? len1 : len2;
for (int i = 0; i < maxLen; ++i)
{
sum = carry;
if (len1 > i)
{
sum += num1[len1 - i - 1] - '0';
}
if (len2 > i)
{
sum += num2[len2 - i - 1] - '0';
}
if (sum < 10)
{
carry = 0;
result[maxLen - i - 1] = sum + '0';
}
else
{
carry = sum/10;
result[maxLen - i - 1] = sum%10 + '0';
}
}
if (carry > 0)
{
for (int i = 0; i < maxLen; ++i)
{
result[maxLen - i] = result[maxLen - i - 1];
}
result[0] = carry + '0';
}
}
测试结果如下:
请输入一个正整数:
123
请输入一个正整数:
3456
两个整数相加结果: 3579
Press any key to continue