采用竖式计算,条件是正整数A-B。 A>=B
采取和大数加法相同的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | /**************************************************************** * 代码作者: Alex Li * 创建时间: 2024-01-31 05:08:16 * 最后修改: 2025-03-29 18:09:37 * 文件描述: 大数减法 ****************************************************************/ #include <iostream> #include <string> #include <algorithm> using namespace std; const int MAXN = 10005; // 最大数字位数 int A[MAXN], B[MAXN], Result[MAXN]; // 被减数、减数、结果 int Len_A, Len_B, Len_Result; // 各数字的长度 void ReadNumber(int *arr, int &len) { string input; cin >> input; len = input.length(); for (int i = 0; i < len; i++) { arr[i] = input[i] - '0'; } reverse(arr, arr + len); // 低位在前方便计算 } int main() { ReadNumber(A, Len_A); ReadNumber(B, Len_B); Len_Result = max(Len_A, Len_B); // 逐位相减并直接处理借位 for (int i = 0; i < Len_Result; i++) { if (A[i] < B[i]) { A[i+1]--; // 直接从上一位借1 A[i] += 10; // 当前位加10 } Result[i] = A[i] - B[i]; } // 去除前导零 while (Len_Result > 1 && Result[Len_Result-1] == 0) { Len_Result--; } // 输出结果(高位在前) for (int i = Len_Result-1; i >= 0; i--) { cout << Result[i]; } return 0; } |
练习:洛谷P2142
OJ: 4237