要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。#include <iostream> #include <cstring> using namespace std; #define MAX_LENGTH 100 //相关函数的原型 /********* Begin *********/ /********* End *********/ int main() { /********* Begin *********/ /********* End *********/ return 0; }
时间: 2023-07-06 16:36:38 浏览: 51
以下是加法和减法的实现代码:
```c++
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAX_LENGTH 100
string add(string a, string b) {
int len_a = a.length(), len_b = b.length();
if (len_a < len_b) {
swap(a, b);
swap(len_a, len_b);
}
int carry = 0;
string res = "";
for (int i = 0; i < len_a; i++) {
int num_a = a[len_a - 1 - i] - '0';
int num_b = i < len_b ? b[len_b - 1 - i] - '0' : 0;
int sum = num_a + num_b + carry;
res += to_string(sum % 10);
carry = sum / 10;
}
if (carry) {
res += to_string(carry);
}
reverse(res.begin(), res.end());
return res;
}
string subtract(string a, string b) {
int len_a = a.length(), len_b = b.length();
if (len_a < len_b) {
swap(a, b);
swap(len_a, len_b);
cout << "-";
} else if (len_a == len_b && a < b) {
swap(a, b);
cout << "-";
}
int borrow = 0;
string res = "";
for (int i = 0; i < len_a; i++) {
int num_a = a[len_a - 1 - i] - '0';
int num_b = i < len_b ? b[len_b - 1 - i] - '0' : 0;
num_a -= borrow;
borrow = 0;
if (num_a < num_b) {
num_a += 10;
borrow = 1;
}
int diff = num_a - num_b;
res += to_string(diff);
}
reverse(res.begin(), res.end());
while (res[0] == '0' && res.length() > 1) {
res.erase(res.begin());
}
return res;
}
int main() {
string a, b;
cin >> a >> b;
cout << add(a, b) << endl;
cout << subtract(a, b) << endl;
return 0;
}
```
在 `main` 函数中,首先读入两个超长整数 `a` 和 `b`,然后分别调用 `add` 函数和 `subtract` 函数求出它们的和与差,并输出结果。
`add` 函数实现了超长整数的加法,首先将两个数对齐,然后按位相加,并考虑进位。最后将结果翻转过来输出即可。
`subtract` 函数实现了超长整数的减法,首先要比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,并在最终输出结果前加上负号。如果被减数大于等于减数,则按位相减,并考虑借位。最后将结果翻转过来输出即可,并且要去掉前导0。