Cho hai số nguyên num1, num2. Chia num1 cho num2 và đếm số chữ số phần thập phân.
Ví dụ
2/5 = 0.4 → 1 chữ số
2/3 = 0.666... → vô hạn (Infinite)
2/0 → lỗi chia cho 0
Phương pháp
Mô phỏng phép chia tay: lặp lấy dư, nhân 10, chia lại. Dùng unordered_map lưu các dư đã gặp. Nếu dư lặp lại → vô hạn. Nếu dư = 0 → dừng, trả về count.
Ví dụ minh họa (C++)
#include <iostream>
#include <unordered_map>
using namespace std;
int countdigits(int x, int y) {
int result = 0;
unordered_map<int, int> mymap;
while (x % y != 0) {
x = x % y;
result++;
if (mymap.find(x) != mymap.end()) return -1; // vô hạn
mymap[x] = 1;
x = x * 10;
}
return result;
}
int main() {
int res = countdigits(2, 5);
(res == -1) ? cout << "count is Infinity" : cout << "count is " << res;
return 0;
}
Đầu ra
count is 1