Làm sao để xét số thập phân vô hạn tuần hoàn?

#include<bits/stdc++.h>
#include<string>
using namespace std;

string kiemtra(int n, int d)
{
    string res;
    map<int, int> mp;
    mp.clear();
    int rem = n % d;
    while ((rem != 0) && (mp.find(rem) == mp.end()))
    {
        mp[rem] = res.length();
        rem = rem * 10;
        int res_part = rem /d;
        res += to_string(res_part);
        rem = rem % d;
    }
    return (rem == 0) ? "" : res.substr(mp[rem]);
}


int main()
{
     double n,z; int a,b;
    scanf("%d%d",&a,&b);
    int m = a / b;
    printf("%d ",m);
   n =  (double)a/b;
   z = n - m;
string s = to_string(z);
s.erase(0,2);
while ( s.back()== '0')
    s.pop_back();

string res = kiemtra(a, b);
if ( res == "")
{
    cout << s;
} else cout << -1;


    return 0;
}

Mong được sửa ạ

Có lỗi gì hay vấn đề gì mà cần sửa vậy bạn?

1 Like

code có một só cái số nó in sai chưa xét hết trường hợp

Hôm qua bạn có đăng phần ví dụ nhập - xuất mình thấy nó xuất có đến 2 chữ số lặp.

0.3333... chỉ tuần hoàn 1 chữ số (3), nhưng phần xuất yêu cầu có 2 (33) đấy. Có thể đây là lý do gây ra vấn đề không?

không bạn nếu là tuần hoàn chỉ kiếm tra thôi nếu là tuấn hoàn thì mình xuất ra -1

Tức là nếu nhập 1 3 thì kết quả là 0 -1?
Đề bài còn yêu cầu gì nữa không?

Bài này thực ra là phân tích mẫu số (sau khi tối giản) :slight_smile: do cơ số 10 = 2*5 nên mẫu số mà chia hết cho snt nào khác 2 và 5 sẽ gây vô hạn tuần hoàn.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?