中南月賽試題Decimal

2022-09-13 17:30:12 字數 1601 閱讀 3895

任意乙個分數都是有理數,對於任意乙個有限小數,我們都可以表示成乙個無限迴圈小數的形式(在其末尾新增0),對於任意乙個無限迴圈小數都可以轉化成乙個分數。現在你的任務就是將任意乙個無限迴圈小數轉化成既約分數形式。所謂既約分數表示,分子和分母的最大公約數是1。

有多組資料。

每組資料一行。輸入為0.a1a2a3...ak(b1b2...bm)的形式,其中a1a2a3...ak為非迴圈部分,(b1b2b3..bm)為迴圈部分。資料保證非迴圈部分的長度k和迴圈部分的長度m不會超過8.

對於每組測試資料輸出a/b,其中a是分子,b是分母,a,b均為整數。

0.0(714285)

0.0(5)

0.9(671)

1/14

1/18

4831/4995

題意:將有理數化為分數形式

題解:將該有理數拆分為兩個數的和的形式。前面有限為和後面的迴圈位

#include

#include

#include

#include

#define ll long long

using namespace std;

ll pow(ll n)

ll s=1;

while(n--) s*=10;

return s;

ll gcd(ll a,ll b)

if(b==0) return a;

else return gcd(b,a%b);

int main()

//freopen("a.txt","r",stdin);

string s;

ll i,len1,len2,pos,s1,s2,flag;

while(cin>>s)

flag=0;

s1=0;

s2=0;

for(i=0;iif(s[i]=='(')

if(flag==0)

len1=s.length()-2;

for(i=2;i<=s.length()-1;i++) s1=s1*10+s[i]-'0';

int c=gcd(s1,(int)pow(len1));

printf("%lld/%lld\n",s1/c,(ll)pow(len1)/c);

else

len1=pos-2;

len2=s.length()-2-pos;

for(i=2;i<=pos-1;i++)

s1=s1*10+s[i]-'0';

for(i=pos+1;is2=s2*10+s[i]-'0';

ll temp1=s1*(pow(len2)-1)+s2;

ll temp2=pow(len1)*(pow(len2)-1);

ll c;

if(len2==0)

c=gcd(s1,(ll)pow(len1));

printf("%lld/%lld\n",s1/c,(ll)pow(len1)/c);

else

ll c=gcd(temp1,temp2);

printf("%lld/%lld\n",temp1/c,temp2/c);

return 0;

2010 ACM ICPC中南地區賽

好久沒有寫部落格了,上週參加了由國防科大舉辦的 2010 acm icpc中南地區賽 熱身賽時只出了兩道題,回來的時候我們還在討論明天是不是要被我們學校的神牛隊拉開很多。正式開始比賽,很快進入狀態,我寫了a題,1y。首先ym自己一下,呵呵。然後進入了拉鋸戰,在c題上我們浪費了太多的時間,基本上每個人...

CCPC中南地區邀請賽小結

此行的時間很趕,周五出發週日回,杭州到湘潭,坐的是火車,還是比較累的。週六早上到,翻山越嶺找到了賓館,休息了一會兒就去找網咖了,因為下午還有一場團體天梯賽。在網咖裡待了三個多小時,這場初賽的題目相對上次的模擬題來說好像稍微好寫一點,不過因為沒帶紙和筆,最後一題沒仔細的推算,只能搞個26分。從網咖出來...

中南大學研究生機試題記錄

有乙個愚蠢的機械人走進乙個w h的迷宮,迷宮裡有空地和陷阱。他想要訪問迷宮的每個方格,但是它很笨,只會按照指令的方向走。當機械人不能走的時候,也就是下一步會遇到陷阱或迷宮邊界,它會向右轉90度 順時針旋轉90度 請問這個機械人最多可以經過多少個方格。對於每組資料,第一行兩個數w和h,表示迷宮的行和列...