usaco ★Fractions to Decimals 分数化小数
生活随笔
收集整理的這篇文章主要介紹了
usaco ★Fractions to Decimals 分数化小数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
★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)
寫一個程序,輸入一個形如 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 ★Fractions to Decimals 分数化小数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《庾楼新岁》第三句是什么
- 下一篇: 边城的作者是谁啊?