Cho hai số num_1 và num_2. Đếm số phép nhớ (carry) khi cộng hai số. Ví dụ: 123 + 157 → 1 lần nhớ (7+3=10, 1+2+5=8, 1+1=2).
Ví dụ
Đầu vào − num_1=432, num_2=638
Đầu ra − 2
Giải thích − 2+8=10 (nhớ 1), 3+3+1=7 (không nhớ), 4+6=10 (nhớ 1) → 2 lần.
Đầu vào − num_1=9999, num_2=111
Đầu ra − 4
Giải thích − Mỗi cặp chữ số đều tạo ra phép nhớ.
Phương pháp giải
Chuyển số thành chuỗi. Duyệt từ cuối chuỗi (chữ số hàng đơn vị). Chuyển ký tự sang số, cộng hai chữ số và carry trước. Nếu tổng ≥ 10 → carry=1, count++. Ngược lại carry=0.
- Hàm
carry_add_two_numbers(int num_1, int num_2). - Chuyển sang
stringbằngto_string. count = 0, carr = 0.- While độ dài > 0:
- Lấy chữ số cuối của mỗi chuỗi (nếu còn), giảm độ dài.
add = i + j + carr.- Nếu
add >= 10:carr=1, count++, elsecarr=0.
- Trả về
count.
Ví dụ code
#include <bits/stdc++.h>
using namespace std;
int carry_add_two_numbers(int num_1, int num_2) {
string str_1 = to_string(num_1);
int len1 = str_1.length();
string str_2 = to_string(num_2);
int len2 = str_2.length();
int count = 0, carr = 0;
while (len1 != 0 || len2 != 0) {
int i = 0, j = 0;
if (len1 > 0) { i = str_1[len1 - 1] - '0'; len1--; }
if (len2 > 0) { j = str_2[len2 - 1] - '0'; len2--; }
int add = i + j + carr;
if (add >= 10) { carr = 1; count++; }
else carr = 0;
}
return count;
}
int main() {
int num_1 = 234578;
int num_2 = 1234;
int count = carry_add_two_numbers(num_1, num_2);
cout << "Count of number of carry operations required to add two numbers are: " << count;
return 0;
}
Đầu ra
Count of number of carry operations required to add two numbers are: 2