UVa 202 Repeating Decimal

原创 2016年05月30日 09:58:51

<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(模拟)

大水题  模拟在草稿纸上算除法的过程→_→ #include #include using namespace std; const int N = 3005; int a[N], v[N]; in...
  • acvay
  • acvay
  • 2015年01月18日 10:17
  • 792

UVa 202 - Repeating Decimals

题目:计算分数的循环节。 分析:数论,组合。             n除以m的余数只能是0~m-1,根据抽屉原则,当计算m+1次时至少存在一个余数相同,             即为循环节;存...
  • mobius_strip
  • mobius_strip
  • 2014年10月07日 23:46
  • 7241

Repeating Decimals UVA - 202

输入m和n,m为被除数,n为除数。用两个数组来存余数和循环小数(或有限小数)。 此前一直用数组b来存除法的结果,无法判断何时开始循环。也并没有思路。 其实手算一遍任意的几个数思路就会开阔一些,比如3/...
  • bitter_orange
  • 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
  • zyq522376829
  • 2015年06月09日 16:25
  • 306

uva202循环小数Repeating Decimals

背景:昨天晚上wrong了两个多小时,今天早上有一只runtime error 思路:一直辗转相除,并用数组存储每一次相除的结果,每除一次,与数组前面的元素相比较一次,当与前面的数组元素相比较时,如果...
  • qiweigo
  • 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
  • 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
  • wyjwyl
  • 2016年01月17日 11:03
  • 400

UVA 202 - Repeating Decimals

题目大意:求两个整数相除的结果,保留小数结果直到出现循环。将循环的括号起来,超过50用省略号代替后面的位。 解题思路:循环(取整,求余乘10),当求余乘10出现重复时,则出现了循环。用map搜索,并...
  • qq_38638213
  • qq_38638213
  • 2017年09月06日 14:47
  • 52

UVa 202 Repeating Decimals

循环小数算循环节什么的 手动算了一个1/7之后思路很清晰 循环节最大长度不会超过分母#include using namespace std; int main(){ int up,down...
  • a1s4z5
  • a1s4z5
  • 2014年12月19日 20:53
  • 269

[UVA 202]Repeating Decimals

题目链接:[UVA 202]Repeating Decimals 题意分析: 给出分子、分母。求循环节的长度,并输出循环节,超过50用...代替。 解题思路: 首先是得到小数部分,例如分数 1/3 。...
  • CatGlory
  • CatGlory
  • 2015年08月21日 10:44
  • 395
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVa 202 Repeating Decimal
举报原因:
原因补充:

(最多只允许输入30个字)