两数相加代码大数据c++
对于大数据相加的问题,我们可以使用字符串来表示这两个大数,并模仿手工相加的过程来进行计算。
#include <iostream>
#include <algorithm>
using namespace std;
string add(string num1, string num2) {
// 确保num1是较长的字符串
if (num1.length() < num2.length()) {
swap(num1, num2);
}
int len1 = num1.length();
int len2 = num2.length();
int carry = 0; // 进位
string result = "";
// 从低位到高位逐位相加
for (int i = len1 - 1, j = len2 - 1; i >= 0; i--, j--) {
int digit1 = num1[i] - '0';
int digit2 = j >= 0 ? num2[j] - '0' : 0; // 如果num2已经处理完,那么用0代替
int sum = digit1 + digit2 + carry;
carry = sum / 10;
result.push_back(sum % 10 + '0');
}
// 如果还有进位,需要加上
if (carry > 0) {
result.push_back(carry + '0');
}
// 翻转字符串,得到正确的结果
reverse(result.begin(), result.end());
return result;
}
int main() {
string num1, num2;
cout << "请输入两个大数:" << endl;
cin >> num1 >> num2;
string sum = add(num1, num2);
cout << "两个大数的和为:" << sum << endl;
return 0;
}
这段代码中,我们使用了string来表示大数,并且通过逐位相加的方式计算结果。首先,我们将两个大数的长度对齐,然后从低位到高位逐位相加,同时记录进位。最后,如果还有进位,需要加上。最后,我们将结果翻转得到正确的结果。
请注意,由于C++标准库对string的长度没有明确限制,因此这段代码可以处理非常大的大数相加
原文地址: https://www.cveoy.top/t/topic/ihdX 著作权归作者所有。请勿转载和采集!