C+对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。例如:输入123456789012345678901 + 123,输出123456789012345679024。要求:输入的两个超长整数都是非负整数,并且长度都小于100位
时间: 2024-03-09 22:50:27 浏览: 95
好的,我可以给你提供 C++ 代码示例来实现对超长整数的加法和减法运算。
以下是加法运算的代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
string add(string num1, string num2) {
// 对齐两个数
int len1 = num1.length(), len2 = num2.length();
while (len1 < len2) {
num1 = '0' + num1;
len1++;
}
while (len2 < len1) {
num2 = '0' + num2;
len2++;
}
string result = "";
int carry = 0; // 进位
for (int i = len1-1; i >= 0; i--) {
int temp = (num1[i] - '0') + (num2[i] - '0') + carry;
carry = temp / 10;
result = char(temp % 10 + '0') + result;
}
if (carry) {
result = char(carry + '0') + result;
}
return result;
}
int compare(string num1, string num2) {
// 比较两个数的大小
if (num1.length() != num2.length()) {
return num1.length() > num2.length() ? 1 : -1;
}
return num1.compare(num2);
}
string subtract(string num1, string num2) {
// 对齐两个数
int len1 = num1.length(), len2 = num2.length();
while (len1 < len2) {
num1 = '0' + num1;
len1++;
}
while (len2 < len1) {
num2 = '0' + num2;
len2++;
}
// 判断大小关系,确保 num1 >= num2
if (compare(num1, num2) < 0) {
swap(num1, num2);
}
string result = "";
int borrow = 0; // 借位
for (int i = len1-1; i >= 0; i--) {
int temp = (num1[i] - '0') - (num2[i] - '0') - borrow;
if (temp < 0) {
temp += 10;
borrow = 1;
} else {
borrow = 0;
}
result = char(temp + '0') + result;
}
// 去掉前导0
while (result.length() > 1 && result[0] == '0') {
result.erase(result.begin());
}
return result;
}
int main() {
string num1, num2;
char op;
cin >> num1 >> op >> num2;
if (op == '+') {
cout << add(num1, num2) << endl;
} else if (op == '-') {
cout << subtract(num1, num2) << endl;
}
return 0;
}
```
以上代码中,我们首先对齐两个数,即在短的数前面补0,然后从低位到高位进行加减运算,同时考虑进位和借位。最后,我们需要去掉减法运算结果的前导0,并在需要的情况下在结果前面加上负号。
希望这些代码可以帮助你完成你的任务。
阅读全文