2736:大整数减法
原题:http://bailian.openjudge.cn/practice/2736/
描述
求两个大的正整数相减的差。
输入
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
输出
一行,即所求的差。
样例输入
9999999999999999999999999999999999999 9999999999999
样例输出
9999999999999999999999990000000000000
解法
思路:同大整数加法相似,而且位数也更方便控制。
#include <iostream> #include <cstring> using namespace std; int factora[200] = {}; int factorb[200] = {}; int dif[205] = {}; int cnt1, cnt2; int sub() { for (int i = 0; i < cnt1; i++) { if (factora[i] < factorb[i]) { factora[i + 1]--; factora[i] = factora[i] + 10; } dif[i] = factora[i] - factorb[i]; } for (int j = cnt1-1; j >= 0; j--) { if (dif[j] != 0) return j; } return 0; } int main() { memset(dif, 0, sizeof(dif)); cnt1 = 0; cnt2 = 0; char inputa[200]; char inputb[200]; cin >> inputa; cin >> inputb; cnt1 = strlen(inputa); cnt2 = strlen(inputb); for (int i = 0; i < cnt1; i++) factora[cnt1 - 1 - i] = inputa[i] - '0'; for (int i = 0; i < cnt2; i++) factorb[cnt2 - 1 - i] = inputb[i] - '0'; int result = sub(); for (int j = result; j >= 0; j--) cout << dif[j]; return 0; }