长除法 循环小数(uva202)(ACM/ICPC WF 1990)

传送门

模拟长除法的计算过程,其中每一位除法时都有被除数和余数,当被除数出现重复时就表示出现循环节了,所以需要记录每一位的被除数及其在循环小数中的位置,需要注意当除数不够除,每一次补零也需要记录其相应的位置。

#include
#include
#include

using namespace std;

mappos;

void solve(int n,const int d,string& ans,int& r)
{
    ans=".";
    pos.clear();
    while(true){
        n*=10;
        int p=pos[n];
        if(p==0){
            pos[n]=ans.size();
        }else{
            r=ans.size()-p;
            if(r>50){
                ans.erase(p+50);
                ans+="...";
            }
            ans.insert(p,"(");
            ans+=")";
            break;
        }
        if(n

你可能感兴趣的:(uva,202)