您的位置:首页 > 其它

UVa 202 - Repeating Decimals

2016-03-22 00:13 411 查看
给你两个数,问你他们相除是多少,有无限循环就把循环体括号括起来

模拟除法运算
把每一次的被除数记下,当有被除数相同时第一个循环就在他们之间。
要注意50个数之后要省略号...
每一次输出之后多打一个回车...

#include <iostream>
#include <cstring>
using namespace std;
int a,b;
int flag[30000];//记录该被除数出现的位置
int ans[10000],num,cnt;
void fuc()
{
memset(flag,0,sizeof(flag)); num=0;
while(a>0)
{
if(flag[a]>0) break;
flag[a]=num;
ans[num]=a/b;
a%=b;
a*=10; num++;
}
}
int main()
{
while(cin>>a>>b)
{
printf("%d/%d = ",a,b);
fuc();
printf("%d.",ans[0]);//整数位

if(a>0)
{
for(int i=1;i<flag[a];i++) cout<<ans[i]; //循环体前
cout<<'(';
for(int i=flag[a];i<num&&i<=50;i++)
{
cout<<ans[i];
}
if(num-flag[a]>=50) cout<<"...";
cout<<')'<<endl;
printf("   %d = number of digits in repeating cycle\n\n",num-flag[a]);
}
else
{
for(int i=1;i<num;i++)    cout<<ans[i];
cout<<"(0)\n";
printf("   1 = number of digits in repeating cycle\n\n");
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: