【UVA202】Repeating Decimals(模拟除法)

地址:https://vjudge.net/problem/UVA-202

题意:


循环小数的循环节和长度

 

思路:


1.用sh[]数组记录商中的小数部分,用num[]记录在计算小数部分时变化的被除数

2.当num数组中存在两个相同的元素时,则出现循环节,记录循环节的start和end值

3.当num数组中出现0时则表示运算结束,循环节是0

 

ac代码:


#include 
#define maxn 3050
using namespace std;
int sh[maxn];//num[i]对应的商 
int num[maxn];//变化的被除数 
int main()
{
	int a,b,j,start,end;
	while(scanf("%d%d",&a,&b)!=EOF)
	{
		int i=0;
		num[i]=a%b;
		sh[i]=num[i]*10/b;//求第一位小数 
		for(i=1; ;i++)
		{
			num[i]=num[i-1]*10%b;
			sh[i]=num[i]*10/b;
			for(j=0;j50)
		 {
		 	for(j=start;j

 

你可能感兴趣的:(算法入门题目)