usaco ★Fractions to Decimals 分数化小数
2016-11-20 10:56
176 查看
★Fractions to Decimals 分数化小数
写一个程序,输入一个形如 N/D 的分数(N 是分子,D 是分母),输出它的小数形式。
如果小数有循环节的话,把循环节放在一对圆括号中。例如,
1/3 = .33333333 写成 0.(3)
41/333 = 0.123123123... 写成 0.(123)
用 xxx.0 成表示整数
典型的转化例子:
1/3 = 0.(3)
22/5 = 4.4
1/7 = 0.(142857)
2/2 = 1.0
3/8 = 0.375
45/56 = 0.803(571428)
PROGRAM NAME: fracdec
INPUT FORMAT
单独的一行包括被空格分开的 N 和 D, 1 <= N,D <= 100000。
SAMPLE INPUT (file fracdec.in)
45 56
OUTPUT FORMAT
小数的表示方法上面说的很明白了,如果输出的长度超过 76 个字符,每行输出 76 个。
SAMPLE OUTPUT (file fracdec.out)
0.803(571428)
这是昨天补得三题最后一题也是第二章的最后一题,这题花了我太长时间在输出格式上面,好烦交了11次。
还有一题比这个难考数学,不考格式的有兴趣的可以尝试一下:点击打开链接代码我也放上来解释在我前面的一篇文章有很详细。
usaco题目。
循环节长度
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
return b?gcd(b,a%b):a;
}
ll pow(ll n,ll m,ll q)
{
ll ans=1;
while(m)
{
if(m&1)
ans=ans*n%q;
n=n*n%q;
m>>=1;
}
return ans;
}
ll euler(ll n)
{
ll ans=n;
for(ll i=2;i*i<=n;i++)
{
if(n%i==0)
{
n/=i;
ans=ans/i*(i-1);
}
while(n%i==0) n/=i;
}
if(n>1)
ans=ans/n*(n-1);
return ans;
}
int main()
{
ll p,q;
while(~scanf("%lld %lld",&p,&q))
{
q/=gcd(p,q);
while(q%2==0) q/=2;
while(q%5==0) q/=5;
if(q==1)
{
printf("0\n");
continue;
}
ll t=euler(q);
ll temp=sqrt(t);
int flag=0;
for(ll i=1;i<=temp;i++)
{
if(t%i) continue;
if(pow(10,i,q)==1)
{
printf("%lld\n",i);
flag=1;
break;
}
}
if(flag)
continue;
for(int i=temp;i>=1;i--)
{
if(t%i) continue;
if(pow(10,t/i,q)==1)
{
printf("%lld\n",t/i);
break;
}
}
}
}
写一个程序,输入一个形如 N/D 的分数(N 是分子,D 是分母),输出它的小数形式。
如果小数有循环节的话,把循环节放在一对圆括号中。例如,
1/3 = .33333333 写成 0.(3)
41/333 = 0.123123123... 写成 0.(123)
用 xxx.0 成表示整数
典型的转化例子:
1/3 = 0.(3)
22/5 = 4.4
1/7 = 0.(142857)
2/2 = 1.0
3/8 = 0.375
45/56 = 0.803(571428)
PROGRAM NAME: fracdec
INPUT FORMAT
单独的一行包括被空格分开的 N 和 D, 1 <= N,D <= 100000。
SAMPLE INPUT (file fracdec.in)
45 56
OUTPUT FORMAT
小数的表示方法上面说的很明白了,如果输出的长度超过 76 个字符,每行输出 76 个。
SAMPLE OUTPUT (file fracdec.out)
0.803(571428)
这是昨天补得三题最后一题也是第二章的最后一题,这题花了我太长时间在输出格式上面,好烦交了11次。
还有一题比这个难考数学,不考格式的有兴趣的可以尝试一下:点击打开链接代码我也放上来解释在我前面的一篇文章有很详细。
usaco题目。
/* ID:jinbo wu TASK:fracdec LANG:C++ */ #include<bits/stdc++.h> using namespace std; int v[100005]; char a[1000000]; char b[10000]; int gcd(int n,int m) { return m==0?n:gcd(m,n%m); } int main() { freopen("fracdec.in","r",stdin); freopen("fracdec.out","w",stdout); int n,m,flag; cin>>n>>m; int temp=gcd(n,m); n/=temp; m/=temp; temp=n/m; int l=0; do { b[++l]=48+temp%10; temp/=10; }while(temp); for(int i=1;i<=l;i++) a[i]=b[l-i+1]; a[++l]='.'; int cnt=l; v[n%m]=++l; n=(n%m)*10; a[l]=48+(n/m)%10; while(1) { temp=n%m; if(v[temp]) { flag=v[temp]; if(temp==0) { flag=0; if(l-cnt>1) l--; } break; } v[temp]=++l; n=(n%m)*10; int t=(n/m)%10; a[l]=48+t; } int len=1; int k=l; cnt=0; for(int i=1;i<=l;i++) { if(flag!=0) { if(len==flag) { cout<<"("; cnt++; if(cnt%76==0) cout<<endl; } cout<<a[len]; cnt++; if(len==l) { cout<<")"; cnt++; if(cnt%76==0) cout<<endl; } len++; if(cnt%76==0) cout<<endl; } else { cout<<a[len++]; if((len-1)%76==0) cout<<endl; } } cout<<endl; }
循环节长度
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
return b?gcd(b,a%b):a;
}
ll pow(ll n,ll m,ll q)
{
ll ans=1;
while(m)
{
if(m&1)
ans=ans*n%q;
n=n*n%q;
m>>=1;
}
return ans;
}
ll euler(ll n)
{
ll ans=n;
for(ll i=2;i*i<=n;i++)
{
if(n%i==0)
{
n/=i;
ans=ans/i*(i-1);
}
while(n%i==0) n/=i;
}
if(n>1)
ans=ans/n*(n-1);
return ans;
}
int main()
{
ll p,q;
while(~scanf("%lld %lld",&p,&q))
{
q/=gcd(p,q);
while(q%2==0) q/=2;
while(q%5==0) q/=5;
if(q==1)
{
printf("0\n");
continue;
}
ll t=euler(q);
ll temp=sqrt(t);
int flag=0;
for(ll i=1;i<=temp;i++)
{
if(t%i) continue;
if(pow(10,i,q)==1)
{
printf("%lld\n",i);
flag=1;
break;
}
}
if(flag)
continue;
for(int i=temp;i>=1;i--)
{
if(t%i) continue;
if(pow(10,t/i,q)==1)
{
printf("%lld\n",t/i);
break;
}
}
}
}
相关文章推荐
- 【USACO 2.4】Fractions to Decimals(分数转小数)
- [USACO2.4]分数化小数 Fractions to Decimals
- USACO - Fractions to Decimals(分数化小数找循环节)
- 问题 H: 2.4.5 Fractions to Decimals 分数化小数
- Problem H: 2.4.5 Fractions to Decimals 分数化小数
- USACO section 2.4 Fractions to Decimals(小数处理)
- usaco2.4.6分数化小数
- Problem H: 2.4.5 Fractions to Decimals 分数化小数
- USACO section 2.4 Fractions to Decimals(小数处理)
- 1439: 2.4.5 Fractions to Decimals 分数化小数
- 问题 H: 2.4.5 Fractions to Decimals 分数化小数
- Fractions to Decimals_usaco2.4.5_暴力
- YTU 1439: 2.4.5 Fractions to Decimals 分数化小数
- 1439: 2.4.5 Fractions to Decimals 分数化小数
- 【USACO2.4.5】分数化小数 模拟
- USACO&nbsp;2.4&nbsp;分数化小数
- 洛谷P1530 分数化小数 Fractions to Decimals
- YTU 1439: 2.4.5 Fractions to Decimals 分数化小数
- Problem H: 2.4.5 Fractions to Decimals 分数化小数
- 《算法竞赛入门经典》习题2-5 分数化小数(Decimal)