Biểu diễn phân số a/b dưới dạng số thập phân vô hạn tuần hoàn

Biểu diễn phân số a/b dưới dạng số thập phân vô hạn tuần hoàn.

Đây là đề thi của Đại học Nha Trang.

Đề bài câu 1: http://clbth.ntu.edu.vn/phpbb/viewtopic.php?f=23&t=306&p=889&sid=77d0d20536df3846d823c82a0d4bcdf0#p889

Code:

#include<cstdio>
#include<iostream>
#include<list>

using namespace std;
int T, a, b, q, r, rr,rrr;
list<int> L;
bool isok;

int main(){
   list<int>::iterator it ;
   freopen("TEST.INP","r",stdin);
   freopen("TEST.OUT","w",stdout);
   cin >> T;
   for(int t = 0; t < T; t++){
      cin >> a >> b;
      L.clear();
   
      if(a >= b){
         cout << a / b;
         r = a - (a / b) * b;
      }
      else{
         cout << "0";
         r = a;
      }
      cout << ".";
      if(r == 0){
         cout << "0";   
      }
      // tim chu ki tuan hoan
      rr = r;
      L.push_back(r);
      while(true){
         if(r == 0) break;
         if(r < b){
            r *= 10;
         }
         if(r >= b){
            r = r - (r / b) * b;
         }
         isok = false;
         for(it = L.begin(); it != L.end(); it++){
            //cout << "it = " << *it << " r = " << r << endl;
            if(*it == r){
               rrr= r;
               isok = true;
               break;   
            }
         }
         if(isok) break;
         L.push_back(r);
      };
      // in lai ket qua
      L.clear();
      L.push_back(rr);
      r = rr;
      while(true){
         if(r == 0) break;
         if(r == rrr){
            cout << "(";
         }
         if(r < b){
            r *= 10;
         }      
         cout << r / b;
         if(r >= b){
            r = r - (r / b) * b;
         }
         isok = false;
         for(it = L.begin(); it != L.end(); it++){
            //cout << "it = " << *it << " r = " << r << endl;
            if(*it == r){
               isok = true;
               break;   
            }
         }
         if(isok) break;
         L.push_back(r);
      };
      if(r!= 0) cout << ")";
      cout << endl;
   }
   return 0;   
}

One Response to “Biểu diễn phân số a/b dưới dạng số thập phân vô hạn tuần hoàn”


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: