USACO Section 2.3 Fractions to Decimals
2014-01-24 16:09
465 查看
题意:
已知分子分母 求 该数字的小数形式 要求如果是循环小数用()表示出循环节
思路:
不循环小数容易处理 循环小数需要找出哪里是循环节 想象笔算除法的方法可以知道
当被除数的状态再次出现 则表示进入循环 用此方法即可
记录状态时候数组开的大点(我还用了map来映射该状态对应的位置)
因为循环节不一定什么时候出现… 我不会算…
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/wronged.gif)
注意:
USACO对空格和回车也判断 一定要注意格式!!
代码;
/*
ID: housera1
PROG: fracdec
LANG: C++
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
#define M 1000000
int tot,cir;
int ans[M];
map<int,int> mp;
int main(){
int Debug=0;
if(!Debug){
freopen("fracdec.in","r",stdin);
freopen("fracdec.out","w",stdout);
}
int i,up,dn,outi,tmp;
scanf("%d%d",&up,&dn);
tmp=up/dn;
up=up%dn;
printf("%d.",tmp);
if(!up)
{
printf("0\n");
return 0;
}
if(tmp>99999) outi=7;
else if(tmp> 9999) outi=6;
else if(tmp> 999) outi=5;
else if(tmp> 99) outi=4;
else if(tmp> 9) outi=3;
else outi=2;
mp.clear();
tot=1;
cir=-1;
while(up)
{
up*=10;
if(mp[up])
{
cir=mp[up];
break;
}
ans[tot]=up/dn;
mp[up]=tot;
tot++;
up%=dn;
}
if(cir<0)
{
for(i=1;i<tot;i++,outi++)
{
if(outi==76)
{
printf("\n");
outi=0;
}
printf("%d",ans[i]);
}
}
else
{
for(i=1;i<cir;i++,outi++)
{
if(outi==76)
{
printf("\n");
outi=0;
}
printf("%d",ans[i]);
}
if(outi==76)
{
printf("\n");
outi=0;
}
printf("(");
outi++;
for(;i<tot;i++,outi++)
{
if(outi==76)
{
printf("\n");
outi=0;
}
printf("%d",ans[i]);
}
if(outi==76)
{
printf("\n");
outi=0;
}
printf(")");
outi++;
}
printf("\n");
return 0;
}
已知分子分母 求 该数字的小数形式 要求如果是循环小数用()表示出循环节
思路:
不循环小数容易处理 循环小数需要找出哪里是循环节 想象笔算除法的方法可以知道
当被除数的状态再次出现 则表示进入循环 用此方法即可
记录状态时候数组开的大点(我还用了map来映射该状态对应的位置)
因为循环节不一定什么时候出现… 我不会算…
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/wronged.gif)
注意:
USACO对空格和回车也判断 一定要注意格式!!
代码;
/*
ID: housera1
PROG: fracdec
LANG: C++
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
#define M 1000000
int tot,cir;
int ans[M];
map<int,int> mp;
int main(){
int Debug=0;
if(!Debug){
freopen("fracdec.in","r",stdin);
freopen("fracdec.out","w",stdout);
}
int i,up,dn,outi,tmp;
scanf("%d%d",&up,&dn);
tmp=up/dn;
up=up%dn;
printf("%d.",tmp);
if(!up)
{
printf("0\n");
return 0;
}
if(tmp>99999) outi=7;
else if(tmp> 9999) outi=6;
else if(tmp> 999) outi=5;
else if(tmp> 99) outi=4;
else if(tmp> 9) outi=3;
else outi=2;
mp.clear();
tot=1;
cir=-1;
while(up)
{
up*=10;
if(mp[up])
{
cir=mp[up];
break;
}
ans[tot]=up/dn;
mp[up]=tot;
tot++;
up%=dn;
}
if(cir<0)
{
for(i=1;i<tot;i++,outi++)
{
if(outi==76)
{
printf("\n");
outi=0;
}
printf("%d",ans[i]);
}
}
else
{
for(i=1;i<cir;i++,outi++)
{
if(outi==76)
{
printf("\n");
outi=0;
}
printf("%d",ans[i]);
}
if(outi==76)
{
printf("\n");
outi=0;
}
printf("(");
outi++;
for(;i<tot;i++,outi++)
{
if(outi==76)
{
printf("\n");
outi=0;
}
printf("%d",ans[i]);
}
if(outi==76)
{
printf("\n");
outi=0;
}
printf(")");
outi++;
}
printf("\n");
return 0;
}
相关文章推荐
- USACO section 2.4 Fractions to Decimals(小数处理)
- USACO section 2.4 Fractions to Decimals(小数处理)
- usaco-Section 2.4-Fractions to Decimals
- USACO-Section2.4 Fractions to Decimals【模拟法】
- USACO Section 2.4 Fractions to Decimals(模拟除法)
- USACO-Section 2.4 Fractions to Decimals(模拟)
- USACO 2.4 Fractions to Decimals
- USACO2.4.5 Fractions to Decimals (fracdec)
- USACO 2.4 Fractions to Decimals
- USACO: Fractions to Decimals心得
- USACO Fractions to Decimals
- USACO 2.4.5 Fractions to Decimals
- USACO Fractions to Decimals
- usaco——fractions to Decimals
- USACO2.4.5 Fractions to Decimals (fracdec)
- 输入输出细节处理,USACO Fractions to Decimals
- USACO 2.4.5 Fractions to Decimals
- USACO:Fractions to Decimals
- USACO 2.4 Fractions to Decimals
- 【模拟】【USACO】Fractions to Decimals