题目描述
1/7 = 0.142857142 ⋯ 是个无限循环小数。
任何有理数都可以表示为无限循环小数的形式。
题目要求即是:给出一个数字的循环小数表示法。
输入描述
输入一行,两个整数。
每个整数范围均为:1 ~ 1000。
输出描述
输出两个整数做除法产生的小数或无限循环小数(循环节用方括号括起)。
输入输出样例
示例
输入
1,7
输出
0.[142857]
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
分析
拿res来存储小数位,digit来存储余数的位置,在while循环中首选获取余数t记录余数的位置digit[t],j为当前的小数位数。
代码
#include<iostream>
#include<cstdio>
using namespace std;
int digit[1005];
char res[1005];
int main()
{
int a, b;
scanf("%d, %d", &a, &b);
double m = (double)a / b;
int j = 1, t;
while(1)
{
t = a - a / b * b;
a = t * 10;
res[j] = a / b + '0';
if (digit[t] != 0) break;
digit[t] = j++;
}
if (t == 0)
{
cout << m << endl;
return 0;
}
cout << (int)m << ".";
for (int k = 1; k < j; ++k)
{
if (k == digit[t])
cout << "[";
cout << res[k];
}
cout << "]" << endl;
return 0;
}