1: 输入N,M;
2:做第一次的除法(整数的)
3:没有除尽的,用一个while循环;【退出条件有两个,(1)除到50位(题目要求);(2)看第4个步骤】
4:在while循环中,嵌套一个while,如果发现有余数出现两次的话,退出;(找到循环节的开头)
5:输出:
(1)直接输出整数;
(2)来判断有没有循环节,有,则输出‘(’;
(3)输出 循环节╱小数点后的商;
(4)同(2),有,则输出‘)’;
#include<iostream>
using namespace std;int main()
{
int N,M;
int r[51];
int c[51];
int flag,i,j,k;
cin >> N >> M;
flag = 1;
c[0] = N / M;
r[0] = N - c[0] * M;
k = 0;
i = 0;
while ((flag == 1)&&(r[k] != 0))
{
c[k + 1] = (r[k] * 10) / M;
r[k + 1] = (r[k] * 10) - M * c[k + 1];
k = k + 1;
if (k == 50) flag = 0;
i = 0;
while ((i < k)&&(flag == 1))
{
if (r[i] == r[k]) flag = 0;
i++;
}
}
cout << c[0];
if (r[0] != 0)
{
//cout << "yes";
cout << '.';
}
for (j = 1;j <= i - 1;j++)
{
cout << c[j];
}
if (r[k] != 0)
{
cout << '(';
}
if (r[0] != 0)
{
for (j = i;j <= k;j++)
{
cout << c[j];
}
}
if (r[k] != 0)
cout << ')';
cin >> N;
return 0;
}