对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。
时间: 2024-03-14 07:46:51 浏览: 89
C代码实现超长整数字符串 相加,及相应执行程序
好的,这是一个非常有趣的任务!我们来分步骤实现吧。
首先,我们需要定义一个函数来将字符串转换成整数,因为我们无法使用int或long等基本类型。在这个函数中,我们需要从字符串的最后一位开始遍历,将每一位转换成数字并将其乘以相应的权值,然后将其相加得到整个数字。
这是一个将字符串转换成整数的示例代码:
```c++
int str2int(string s) {
int len = s.length();
int num = 0;
for (int i = len - 1; i >= 0; i--) {
num += (s[i] - '0') * pow(10, len - i - 1);
}
return num;
}
```
接下来,我们需要定义一个函数来将整数转换成字符串。在这个函数中,我们需要从整数的最后一位开始遍历,将每一位转换成字符并将其添加到字符串中。最后,我们需要反转字符串,因为我们是从后往前遍历的。
这是一个将整数转换成字符串的示例代码:
```c++
string int2str(int num) {
string s = "";
while (num > 0) {
s += (num % 10) + '0';
num /= 10;
}
reverse(s.begin(), s.end());
return s;
}
```
现在,我们可以开始实现超长整数的加法和减法了。对于加法,我们可以从两个字符串的最后一位开始遍历,将每一位相加并将其保存到结果字符串中。如果相加的结果大于等于10,则需要将进位保存到下一位的相加中。最后,我们需要反转结果字符串,因为我们是从后往前遍历的。
这是一个超长整数加法的示例代码:
```c++
string addLongInt(string s1, string s2) {
string s = "";
int len1 = s1.length(), len2 = s2.length();
int carry = 0;
for (int i = len1 - 1, j = len2 - 1; i >= 0 || j >= 0 || carry > 0; i--, j--) {
int num1 = i >= 0 ? s1[i] - '0' : 0;
int num2 = j >= 0 ? s2[j] - '0' : 0;
int sum = num1 + num2 + carry;
s += (sum % 10) + '0';
carry = sum / 10;
}
reverse(s.begin(), s.end());
return s;
}
```
对于减法,我们需要先比较两个字符串的大小,然后从大的那个字符串的最后一位开始遍历,将每一位相减并将其保存到结果字符串中。如果相减的结果小于0,则需要向前一位借位。最后,我们需要去掉结果字符串前面的0,并且如果结果为负数需要在前面加上负号。
这是一个超长整数减法的示例代码:
```c++
string subLongInt(string s1, string s2) {
string s = "";
int len1 = s1.length(), len2 = s2.length();
bool negative = false;
if (len1 < len2 || (len1 == len2 && s1 < s2)) {
swap(s1, s2);
swap(len1, len2);
negative = true;
}
int borrow = 0;
for (int i = len1 - 1, j = len2 - 1; i >= 0 || j >= 0; i--, j--) {
int num1 = i >= 0 ? s1[i] - '0' : 0;
int num2 = j >= 0 ? s2[j] - '0' : 0;
int diff = num1 - num2 - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
s += diff + '0';
}
reverse(s.begin(), s.end());
while (s.length() > 1 && s[0] == '0') {
s.erase(0, 1);
}
if (negative) {
s = "-" + s;
}
return s;
}
```
现在我们已经成功地实现了超长整数的加法和减法,我们可以通过以下代码来测试它们:
```c++
int main() {
string s1, s2, op;
cin >> s1 >> op >> s2;
string result;
if (op == "+") {
result = addLongInt(s1, s2);
} else if (op == "-") {
result = subLongInt(s1, s2);
}
cout << result << endl;
return 0;
}
```
希望这能帮到你!
阅读全文