对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。对于这个问题用c++语言进行编程
时间: 2024-02-29 22:57:19 浏览: 44
超长整数的处理
5星 · 资源好评率100%
好的,这是一个字符串实现的超长整数加减法的问题。下面是C++代码实现:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// 去掉字符串前导0
string removeLeadingZero(string str) {
int i = 0;
while (i < str.length() && str[i] == '0') {
i++;
}
return str.substr(i);
}
// 实现超长整数加法
string addLongInt(string a, string b) {
string res = ""; // 存放结果的字符串
int carry = 0; // 进位标志
int i = a.length() - 1, j = b.length() - 1;
while (i >= 0 || j >= 0 || carry > 0) {
int sum = carry; // 当前位的和
if (i >= 0) {
sum += a[i] - '0';
i--;
}
if (j >= 0) {
sum += b[j] - '0';
j--;
}
carry = sum / 10; // 计算进位
sum %= 10; // 当前位的结果
res += to_string(sum); // 将当前位结果转换为字符串
}
reverse(res.begin(), res.end()); // 翻转字符串
return removeLeadingZero(res); // 去掉前导0
}
// 实现超长整数减法
string subLongInt(string a, string b) {
if (a == b) { // 如果两个数相等,直接返回0
return "0";
}
bool neg = false; // 结果是否为负数的标志
if (a.length() < b.length() || (a.length() == b.length() && a < b)) {
swap(a, b); // 保证a > b
neg = true; // 结果为负数
}
string res = ""; // 存放结果的字符串
int borrow = 0; // 借位标志
int i = a.length() - 1, j = b.length() - 1;
while (i >= 0 || j >= 0) {
int diff = borrow; // 当前位的差
if (i >= 0) {
diff += a[i] - '0';
i--;
}
if (j >= 0) {
diff -= b[j] - '0';
j--;
}
if (diff < 0) { // 需要借位
borrow = -1;
diff += 10;
} else {
borrow = 0;
}
res += to_string(diff); // 将当前位结果转换为字符串
}
reverse(res.begin(), res.end()); // 翻转字符串
if (neg) { // 如果结果为负数,加上负号
res = "-" + res;
}
return removeLeadingZero(res); // 去掉前导0
}
int main() {
string a, b; // 输入的两个超长整数
char op; // 运算符
cin >> a >> op >> b;
if (op == '+') {
cout << addLongInt(a, b) << endl;
} else if (op == '-') {
cout << subLongInt(a, b) << endl;
} else {
cout << "Invalid operator!" << endl;
}
return 0;
}
阅读全文