对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。/*------------------------------------------------------ 注意:仅在标有"Begin"和"End"的注释行之间补充填写代码, 请勿改动任何已有内容。 ------------------------------------------------------*/ #include <iostream> #include <cstring> using namespace std; #define MAX_LENGTH 100 //相关函数的原型 /********* Begin *********/ /********* End *********/ int main() { /********* Begin *********/ /********* End *********/ return 0; } //相关函数的具体定义 /********* Begin *********/ /********* End *********/
时间: 2023-07-06 12:42:00 浏览: 98
好的,下面是对应的 C++ 代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
#define MAX_LENGTH 100
// 字符串逆序
void reverse(string& s) {
int left = 0, right = s.length() - 1;
while (left < right) {
swap(s[left], s[right]);
left++, right--;
}
}
// 字符串加法
string add(string num1, string num2) {
// 字符串逆序
reverse(num1), reverse(num2);
// 用 0 补齐,使它们的长度相等
if (num1.length() < num2.length()) {
num1 += string(num2.length() - num1.length(), '0');
} else {
num2 += string(num1.length() - num2.length(), '0');
}
// 从低位开始,将两个字符串对应位相加,考虑进位,将结果存到一个新的字符串中
string result;
int carry = 0;
for (int i = 0; i < num1.length(); i++) {
int s = num1[i] - '0' + num2[i] - '0' + carry;
carry = s / 10;
result += to_string(s % 10);
}
// 如果最高位有进位,则将进位也加上
if (carry > 0) {
result += to_string(carry);
}
// 字符串逆序,删除前导 0,输出结果
reverse(result);
result.erase(0, result.find_first_not_of('0'));
if (result.empty()) {
result = "0";
}
return result;
}
// 字符串减法
string subtract(string num1, string num2) {
// 比较被减数和减数的大小
if (num1.length() < num2.length() || (num1.length() == num2.length() && num1 < num2)) {
swap(num1, num2);
num1 = '-' + num1;
}
// 字符串逆序
reverse(num1), reverse(num2);
// 用 0 补齐,使它们的长度相等
num2 += string(num1.length() - num2.length(), '0');
// 从低位开始,将两个字符串对应位相减,考虑借位,将结果存到一个新的字符串中
string result;
int borrow = 0;
for (int i = 0; i < num1.length(); i++) {
int s = num1[i] - '0' - num2[i] + borrow;
if (s < 0) {
s += 10;
borrow = -1;
} else {
borrow = 0;
}
result += to_string(s);
}
// 字符串逆序,删除前导 0,输出结果
reverse(result);
result.erase(0, result.find_first_not_of('0'));
if (result.empty()) {
result = "0";
}
return result;
}
int main() {
string num1, num2, op;
cin >> num1 >> op >> num2;
if (op == "+") {
cout << add(num1, num2) << endl;
} else {
cout << subtract(num1, num2) << endl;
}
return 0;
}
```
希望这些代码能够帮到你!
阅读全文