题意:将分数化小数,也就是分子除以分母的值,难点在于循环节的判断以及竖式的模拟,送上题解
#include<bits/stdc++.h>
using namespace std;
int a,d;
int ok=1;
int p[1010000];
int k[1010000];
int main()
{
//freopen("fracdec.in","r",stdin);
//freopen("fracdec.out","w",stdout);
cin>>a>>d;
int ans=0;//小数部分的位数
int q=1;//小数点要算位数
int u=a/d;//整数部分
cout<<u<<".";
if(u==0) ++q;//特判 0
while(u)
{
u/=10;
q++;
}//判断整数部分的位数,后面要用
a%=d;
int t=10;//记录是否有循环节
while(a||ans<1)
{
a*=10;
k[a]++;//记录出现次数 ,通过被除数(前一次做完后的余数)比较
if(k[a]>1)
{
t=a/d;
ok=0;
break;
}//遇到循环节跳出,记录
p[++ans]=a/d;
a%=d;
}//数论模拟,小学生竖式法
for(int i=1;i<=ans;++i)
{
if(p[i]==t) cout<<"(",t=-1,++q;//在第一个搜到的循环加括号
cout<<p[i];
if((i+q)%76==0) cout<<endl;//换行 ,q是要算上在小数部分前的位数
}
if(t<10) cout<<")";//如果t的初值改变
cout<<endl;
return 0;
}