超长整数的加减运算 C++,编写函数,运用字符串实现两个超长正整数的减法,但不使用 <algorithm>
时间: 2024-03-14 21:45:49 浏览: 74
C++语言的大整数加减
好的,我可以帮你实现这个函数。以下是代码示例:
```c++
#include <iostream>
#include <string>
namespace std;
string Subtract(string num1, string num2) {
int len1 = num1.length();
int len2 = num2.length();
// 如果 num1 小于 num2,交换两个数
if (len1 < len2 || (len1 == len2 && num1 < num2)) {
swap(num1, num2);
swap(len1, len2);
}
string result(len1, '0');
int carry = 0;
int i = len1 - 1;
int j = len2 - 1;
while (i >= 0 || j >= 0 || carry == 1) {
int digit1 = i >= 0 ? num1[i] - '0' : 0;
int digit2 = j >= 0 ? num2[j] - '0' : 0;
int diff = digit1 - digit2 - carry;
if (diff < 0) {
diff += 10;
carry = 1;
} else {
carry = 0;
}
result[i] = diff + '0';
i--;
j--;
}
// 去掉前导零
int start = 0;
while (start < result.length() - 1 && result[start] == '0') {
start++;
}
return result.substr(start);
}
int main() {
string num1 = "123456789012345678901234567890";
string num2 = "98765432109876543210987654321";
string result = Subtract(num1, num2);
cout << result << endl;
return 0;
}
```
这个函数的实现思路是先将两个数按位对齐,并从低位到高位逐位相减,如果被减数的某一位小于减数的对应位,则需要向高位借位,处理完所有的位数后,再去掉结果的前导零。
阅读全文