# UVa 202 Repeating Decimal

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:18px;">问题：求一个有理数的循环周期。</span></span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="font-size:18px;">思路：余数出现分母次后，只少会有两次是相同的</span></span>

流程：①读取分子，分母；

②取模、取余、乘10，放到一个结构数组中

③每取一个余数，都要到结构中查一下是否有相同的值

④这两个值之间的值就是周期。

⑤根据格式输出周期

⑥如果超过50，使用省略号。

Trick：OJ上最后结果添加了一个空行，提交了好几次总是PresentationE，神奇。

#include<iostream>
#include<string>
#include<iomanip>

using namespace std;

typedef struct {
int factor;
int remainder;
} Elem;

int main()
{
#ifndef UVa
FILE *fp;
freopen_s(&fp, "data.in.txt", "r", stdin);
freopen_s(&fp, "data.out.txt", "w", stdout);
#endif

Elem *eArr = new Elem[3000];
int numerator = 0;
int denominator = 0;
int cnt = 0;

while (cin >> numerator >> denominator) {
int pos1 = -1,pos2 = -1;
if (cnt++ > 0)
cout << endl;
cout << numerator << "/" << denominator << " = ";
for (int i = 0; i < 3000; ++i) {
eArr[i].factor = numerator / denominator;
numerator %= denominator;
eArr[i].remainder = numerator;
numerator *= 10;
for (int j = 0; j < i; ++j)
if (eArr[i].remainder == eArr[j].remainder) {
pos1 = j;
pos2 = i;
break;
}
else {
pos1 = -1;
pos2 = -1;
}//endif
if (pos1 != -1 && pos2 != -1)
break;
}//endfor

cout << eArr[0].factor << ".";
int index = 0;
for (index = 1; index <= pos1; ++index)
cout << eArr[index].factor;
cout << "(";

for (; index <= pos2; ++index ) {
cout << eArr[index].factor;
if (index == 50)
break;
}
if (index == 50)
cout << "...";
cout << ")" << endl;
cout << "   " << setiosflags(ios::left) << pos2 - pos1 << " = number of digits in repeating cycle" << endl;
}
cout << endl;
return 0;
}


• 本文已收录于以下专栏：

## UVa 202 Repeating Decimals(模拟)

• acvay
• 2015年01月18日 10:17
• 792

## UVa 202 - Repeating Decimals

• mobius_strip
• 2014年10月07日 23:46
• 7241

## Repeating Decimals UVA - 202

• bitter_orange
• 2017年02月08日 22:12
• 121

## Uva - 202 - Repeating Decimals

The decimal expansion of the fraction 1/33 is  , where the  is used to indicate that the cycle 03 r...
• zyq522376829
• 2015年06月09日 16:25
• 306

## uva202循环小数Repeating Decimals

• qiweigo
• 2015年01月23日 08:43
• 1318

## 循环小数(Repeating Decimals, ACM/ICPC World Finals 1990, UVa202)

UVA202循环小数Repeating Decimals Repeating DecimalsThe decimal expansion of the fraction 1/33 is , wher...
• sunlanchang
• 2017年01月29日 11:37
• 598

## UVA 202 - Repeating Decimals【循环小数循环节】

202 - Repeating Decimals Time limit: 3.000 seconds The decimal expansion of the fraction 1/33 ...
• wyjwyl
• 2016年01月17日 11:03
• 400

## UVA 202 - Repeating Decimals

• qq_38638213
• 2017年09月06日 14:47
• 52

## UVa 202 Repeating Decimals

• a1s4z5
• 2014年12月19日 20:53
• 269

## [UVA 202]Repeating Decimals

• CatGlory
• 2015年08月21日 10:44
• 395

举报原因： 您举报文章：UVa 202 Repeating Decimal 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)