您的位置:首页 > 其它

章三习题8——UVA 202 Repearing Decimals

2017-02-27 00:43 337 查看
题意:

这个题是来找循环节。

因为每一个分数肯定是一个无限循环的小数

输出这个小数,然后循环节要用()括起来,并显示出循环节的长度

若除数相同,被除数相同,则之后的商和余数肯定是相同的。所以我们需要找除数相同的,,除数为 余数*10,

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define maxn 3005
int dis[maxn];
int ans[maxn];
int w[maxn];
int main()
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
{
memset(dis,0,sizeof(dis));
int n=a/b;
int h=0;
ans[h++]=n;
int m=a%b;
int count1=1;
while(!dis[m]&&m)
{
dis[m]=count1;
w[count1++]=m;
n=(m*10)/b;
m=m*10%b;
ans[h++]=n;
}
printf("%d/%d = %d.",a,b,ans[0]);
for(int i=1;i<count1&&i<=50;i++)
{
if(n&&w[i]==m) printf("(");
printf("%d",ans[i]);
}
if(h>50)
printf("...");
if(m==0)
printf("(0)\n");
else
printf(")\n");
if(m==0)
count1=1;
else
count1-=dis[m];
printf("%d = number of digits in repeating cycle\n",count1);

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