编写一个add函数,实现两个10位数的和,并设计main函数进行测试。提示:用两个字符串表示两个10位数
【以下回答由 GPT 生成】
我们可以通过模拟手工计算两个10位数的和的过程来实现这个add函数。具体步骤如下:
add
的函数,该函数接受两个字符串类型的参数,表示两个10位数。函数返回一个字符串类型的结果,表示两个数的和。函数的原型如下所示:std::string add(const std::string& num1, const std::string& num2);
在函数内部,首先声明一个字符串变量result
,用于保存计算结果。再声明两个整型变量carry
和sum
,分别用于保存进位和当前位的和。初始时,将carry
设为0。
从字符串的最右侧开始遍历,同时进行加法运算。每一位的加法运算可分为两步:将两个对应位的字符转为整型数字,然后将这两个数字相加,再加上进位carry
的值。
遍历过程中,如果一个数字已经遍历完,那么将其置为0。
result
中。计算进位时,需要将结果除以10得到十位数,并将结果赋值给carry
。
遍历完所有位数后,如果最后一位的运算结果产生进位,那么将进位加到结果result
的最左侧。
最后反转result
字符串,然后将其返回。
编写main
函数进行测试。在main
函数中,你可以调用add
函数来计算两个10位数的和,并输出结果。
下面是具体的实现代码:
#include <iostream>
#include <string>
std::string add(const std::string& num1, const std::string& num2) {
std::string result;
int carry = 0;
int sum;
// 从字符串的最右侧开始遍历
int i = num1.size() - 1;
int j = num2.size() - 1;
while (i >= 0 || j >= 0) {
int n1 = i >= 0 ? num1[i] - '0' : 0; // 如果num1还没有遍历完,将其字符转为数字
int n2 = j >= 0 ? num2[j] - '0' : 0; // 如果num2还没有遍历完,将其字符转为数字
sum = n1 + n2 + carry; // 当前位的和为两个数字和进位的和
result += std::to_string(sum % 10); // 保存个位数字到结果字符串
carry = sum / 10; // 计算进位
i--; // 向左移动一位
j--; // 向左移动一位
}
if (carry > 0) {
result += std::to_string(carry); // 如果最后还有进位,加到结果的最左侧
}
std::reverse(result.begin(), result.end()); // 反转字符串
return result;
}
int main() {
std::string num1 = "1234567890";
std::string num2 = "9876543210";
std::string result = add(num1, num2);
std::cout << "Sum: " << result << std::endl;
return 0;
}
希望以上解决方案能对您有所帮助!如有任何疑问,请随时提问。
【相关推荐】