对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。
时间: 2024-03-14 11:45:40 浏览: 145
以下是加法和减法的实现代码:
```python
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string AddLongInteger(string addend, string augend) {
string result = "";
int carry = 0;
int i = addend.size() - 1, j = augend.size() - 1;
while (i >= 0 || j >= 0 || carry) {
int sum = carry;
if (i >= 0) sum += addend[i--] - '0';
if (j >= 0) sum += augend[j--] - '0';
carry = sum / 10;
result += to_string(sum % 10);
}
reverse(result.begin(), result.end());
return result;
}
string SubLongInteger(string minuend, string subtrahend) {
string result = "";
int borrow = 0;
int i = minuend.size() - 1, j = subtrahend.size() - 1;
bool negative = false;
if (minuend.size() < subtrahend.size() || (minuend.size() == subtrahend.size() && minuend < subtrahend)) {
swap(minuend, subtrahend);
i = minuend.size() - 1;
j = subtrahend.size() - 1;
negative = true;
}
while (i >= 0 || j >= 0) {
int diff = borrow;
if (i >= 0) diff += minuend[i--] - '0';
if (j >= 0) diff -= subtrahend[j--] - '0';
borrow = diff < 0 ? -1 : 0;
diff = (diff + 10) % 10;
result += to_string(diff);
}
reverse(result.begin(), result.end());
while (result.size() > 1 && result[0] == '0') {
result.erase(result.begin());
}
return negative ? "-" + result : result;
}
int main() {
string s1, s2, op;
cin >> s1 >> op >> s2;
if (op == "+") {
cout << AddLongInteger(s1, s2) << endl;
} else if (op == "-") {
cout << SubLongInteger(s1, s2) << endl;
}
return 0;
}
```
对于加法,我们可以按位相加,考虑进位。需要从两个数的最后一位开始相加,一直加到两个数都加完,并且进位为0为止。相加的过程中,需要维护一个进位carry,初始为0,每次加完一位之后,如果有进位,则需要把进位加到下一位上。相加完之后,需要把结果翻转一下,再输出即可。
对于减法,我们需要考虑借位。先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减。按位减的过程中,需要维护一个借位borrow,初始为0,每次减完一位之后,如果需要借位,则borrow为-1,否则为0。减完之后,需要把结果翻转一下,再输出。如果结果为负数,则需要在前面加上负号。注意,如果结果中有前导0,则需要把前导0去掉。
阅读全文
相关推荐










