题目描述:
输入整数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;
}