LBC_2B - Cộng có nhớ
Xem dạng PDF
Gửi bài giải
Điểm:
1,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Tác giả:
Dạng bài
Cho hai dãy bit ~A~, ~B~. Ta biết rằng, để thực hiện phép tính ~A + B~ cần thực hiện các phép tình từ hàng đơn vị của chúng. Ví dụ: ~A = 1011, B = 1001~ thì ~A + B = 10100~. Khi thực hiện phép cổng ở hàng đơn vị ~1 + 1 = 10~ viết ~0~ nhớ ~1~ vì đây là hệ nhị phân. Dễ thấy ~1011 + 1001~ có ~3~ phép cộng có nhớ như vậy.
Yêu cầu: Cho hai số ~A, B~. Hãy cho biết trong phép tính ~A + B~ có bao nhiêu phép tính có nhớ như vậy?
Input
- Gồm 2 dòng chứa dãy bit ~A, B~ không quá ~10^5~ ký tự, chỉ gồm các ký tự ~0~ và ~1~.
Output
- Gồm 1 dòng chứa 1 số nguyên là số phép tính có nhớ trong phép toán ~A + B~.
Sample
Input #1
1011
1001
Output #1
3
Input #2
10111
1111
Output #2
5
Bình luận
include <bits/stdc++.h>
using namespace std;
int main(){ ios::syncwithstdio(false); cin.tie(nullptr);
}
include <bits/stdc++.h>
using namespace std;
int ans = 0; string add(string a, string b) { while (a.size() < b.size()) a = '0' + a; while (a.size() > b.size()) b = '0' + b; int d = 0; string r; for (int i = b.size() - 1; i >= 0; i--) { int c = (b[i] - '0') + (a[i] - '0') + d; d = c / 2; if (d > 0) ++ans; r = (char)(c % 2 + '0') + r; } return r; }
int main() { ios::syncwithstdio(false); cin.tie(nullptr);
string a, b; cin >> a >> b;
add(a, b); cout << ans << '\n'; }