#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main() {
//定义超大整数的有效长度为100000
const int maxLength = 100000;
//定义用来存放两个加数和一个和的字符数组
char num1[maxLength], num2[maxLength], result[maxLength];
cin >> num1 >> num2;
//获取输入的超大整数的实际有效长度
int length1 = strlen(num1);
int length2 = strlen(num2);
//定义两个下标指针来遍历字符数组
int index1 = length1 - 1;
int index2 = length2 - 1;
//sum存放当前两个个位数之和
int sum = 0;
//carry存放进位数,当sum>=10,carry=1
int carry = 0;
//定义两个整型来存放字符数组中转化而来的个位整数
int intNum1, intNum2;
int i = 0;
int maxIndex = max(index1, index2);
while (maxIndex >= 0) {
if (index1 >= 0) {//只有下标指针指大于零,intNum1才会有值
intNum1 = num1[index1--] - '0';//获取当前字符转化为整数
sum += intNum1;
}
if (index2 >= 0) {
intNum2 = num2[index2--] - '0';
sum += intNum2;
}
//当前两个个位数之和还要加上后一位的进位数
sum += carry;
//sum求余取个位数
result[i++] = sum % 10 + '0';
//sum/10得到进位数
carry = sum / 10;
//当前位求和完成清空sum
sum = 0;
//当最后一位求和完成,看是否会进位,进位就在往result字符数组李写一位
if (maxIndex == 0 && carry == 1) {
result[i] = carry + '0';
}
maxIndex--;
}
//倒序遍历输出结果
for (; i >= 0; i--) {
if (result[i] == '\0')
continue;
printf("%c", result[i]);
}
return EXIT_SUCCESS;
}
C/C++ 大数求和,差大整数求和!
最新推荐文章于 2024-07-11 16:10:03 发布