UVA202 Repeating Decimals

题目描述:

输入整数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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值