0
点赞
收藏
分享

微信扫一扫

UVA202 Repeating Decimals

西曲风 2022-02-13 阅读 22

题目描述:

输入整数a和b(0<=a<=3000,1<=b<=3000),输出a/b的循环小数表示以及循环节长度。例如a=5,b=43,小数表示为0.(116279069767441860465)。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int leave[100];
int result[100];
int main(void)
{
	int a, b;
	int count;
	while (scanf("%d%d", &a, &b) == 2)
	{
		int first = 0,last=0;
		int flag=0;
		printf("%d/%d=%d.", a, b, a / b);
		//	先把整数部分处理好,不一定是0;
		leave[0] = a;
		a = a % b;
		for (int i = 0; i < 50; i++)
		{
			result[i] = a * 10 / b;
			leave[i+1] = a * 10 % b;
			a = a * 10 % b;
//			printf("i=%d\n", i);
			for (int j = 0; j < i; j++)
			{
				if (leave[j] == leave[i])
				{
					first = j;
					last = i;
					count = i - j;
					flag = 1;
//					printf("first=%d,last=%d\n", first, last);
					break;
				}
			}
			if (i == 49 && flag == 0)
			{
				flag = 1;
				first = 0;
				last = 49;
				count = 50;
			}
			if (flag == 1)
			{
				break;
			}
		}
		if (count < 50)
		{
			for (int i = 0; i < 50; i++)
			{
				if (i == first)
				{
					printf("(");
				}

				printf("%d", result[i]);
				if ((i + 1) == last)
				{
					printf(")\n");
					break;
				}
			}
			printf("   %d = number of digits in repeating cycle\n\n", count);
		}
		else
		{
			for (int i = 0; i < 49; i++)
			{
				printf("%d", result[i]);
			}
			printf("...");
		}
	}
	return 0;
}
举报

相关推荐

0 条评论