1. 程式人生 > >hdu1717 小數化分數2

hdu1717 小數化分數2

題目連結:

小數化分數2

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2921    Accepted Submission(s): 1187


Problem Description Ray 在數學課上聽老師說,任何小數都能表示成分數的形式,他開始了化了起來,很快他就完成了,但他又想到一個問題,如何把一個迴圈小數化成分數呢?
請你寫一個程式不但可以將普通小數化成最簡分數,也可以把迴圈小數化成最簡分數。

Input 第一行是一個整數N,表示有多少組資料。
每組資料只有一個純小數,也就是整數部分為0。小數的位數不超過9位,迴圈部分用()括起來。

Output 對每一個對應的小數化成最簡分數後輸出,佔一行。
Sample Input 3 0.(4) 0.5 0.32(692307)
Sample Output 4/9 1/2 17/52
Source
Recommend lcy   |   We have carefully selected several similar problems for you:  
1715
 1716 1166 1719 1722 

這個題目參見百度

程式碼為:

#include<cstdio>
#include<cstring>
const int maxn=10+10;
char str[maxn];

int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}

int cal1(int x)
{
    int ans=1;
    for(int i=1;i<=x;i++)
        ans=ans*10;
    return ans;
}

int cal2(int x)
{
    int ans=0;
    for(int i=1;i<=x;i++)
        ans=ans*10+9;
    return ans;
}

int main()
{
    int t,ok,len,start,end,num;
    int son,mother,extra;
    int ans;
    scanf("%d",&t);
    while(t--)
    {
        ok=1;
        scanf("%s",str);
        len=strlen(str);
        for(int i=0;i<len;i++)
        {
            if(str[i]=='(')
               {
                   start=i;
                   ok=0;
               }
            if(str[i]==')')
               {
                   end=i;
                   ok=0;
               }
        }
        if(ok==1)
        {
            son=0;
            mother=cal1((len-2));
            for(int i=2;i<len;i++)
                son=son*10+(str[i]-'0');
        //    printf("mother:%lld son:%lld\n",mother,son);
            ans=gcd(son,mother);
            printf("%d/%d\n",son/ans,mother/ans);
        }
        else if(!ok&&start==2)
        {
            son=0;
            int circle=end-1-start;
            for(int i=3;i<end;i++)
                son=son*10+(str[i]-'0');
            mother=cal2(circle);
            ans=gcd(son,mother);
            printf("%d/%d\n",son/ans,mother/ans);
        }
        else
        {
            son=0;
            extra=0;
            int circle=end-1-start;
            for(int i=2;i<start;i++)
                extra=extra*10+str[i]-'0';
            for(int i=start+1;i<end;i++)
                son=son*10+(str[i]-'0');
            mother=cal2(circle);
            int copymother=cal1(start-2);
            //printf("copymother%I64d\n",copymother);
           // printf("extra:%lld son:%lld mother:%lld\n",extra,son,mother);
            son=mother*extra+son;
            ans=gcd(son,mother);
            son=son/ans;
            mother=mother/ans;
           // printf("%lld/%lld\n",son/ans,mother/ans);
            mother=mother*copymother;
            ans=gcd(son,mother);
            printf("%d/%d\n",son/ans,mother/ans);
        }
    }
    return 0;
}


相關推薦

hdu1717 小數分數2

題目連結: 小數化分數2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2921    Accepted

hdu1717 小數分數

std acc ef6 -a get nbsp c++ 只有一個 con 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1717 小數化分數2 Time Limit: 1000/1000 MS (Java/Others)

1717 小數分數2

題目: Ray 在數學課上聽老師說,任何小數都能表示成分數的形式,他開始了化了起來,很快他就完成了,但他又想到一個問題,如何把一個迴圈小數化成分數呢?  請你寫一個程式不但可以將普通小數化成最簡分數,也可以把迴圈小數化成最簡分數。  Input第一行是一個整數N,表示

HDOJ 1717 小數分數2

連結:http://acm.hdu.edu.cn/showproblem.php?pid=1717 題目: 小數化分數2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav

HDU 1717 小數分數2

#include<stdio.h> #include<string.h> int f(int x) { int i, sum = 1; for(i = 1;

HDU 1717 小數分數2【數學】

小數化分數2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub

hdu 1717小數分數2

 眾所周知,有限小數是十進分數的另一種表現形式,因此,任何一個有限小數都可以直接寫成十分之幾、百分之幾、千分之幾……的數。那麼無限小數能否化成分數? 首先我們要明確,無限小數可按照小數部分是否迴圈分成兩類:無限迴圈小數和無限不迴圈小數。無限不迴圈小數不能化分數,這在中學將會得

HDOJ 1717 小數分數2 (數學,迴圈小數分數詳細講解)

 小數化分數2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total

HDU 1717 小數分數2(數學基本知識)

Sample Output 4/9 1/2 17/52 【思路分析】   該題的關鍵點就是迴圈小數化為分數,有一個結論,假如這個迴圈小數是0.(1234),其化為分數即為1234/9999,也就是迴圈的部分除以這個迴圈部分長度個9,即1234除以4個(1234的長度)9。證明如下:   設這個迴圈小數x為0.

hdu 1717 小數分數2 (數學)

小數化分數2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2022    Accepted Submis

小數分數2 杭電1717

4/9 1/2 17/52 這個題目其實很簡單,但是我還是花了很多時間在上面,真是比較慚愧,開始我用的是這個思想,但是程式碼提交老是wrong,我 也不知道是為什麼,如果有興趣可以看看。 http://hi.baidu.com/niren_cn/blog/item/d6b62516badadf47f91

hdu 1717 小數分數2 (迴圈小數轉分數

本題可推出公式 首先跟你一個小數 令X= 0 . s1 s2 ..sn ( y1 y2 y3..ym ) 這樣的話我們把小數點分為三個部分,分別用三種顏色標記了! 我們可以把表示式轉換成:X * 10 ^n=s1s2..sn+0.y1y2..ym;    我們用S

小數分數 模擬題

小數化分數 Problem Description 將給出的小數化為分數 Input 只有一行,為要轉換的小數(正負均有)。 注意:小數的格式有好幾種。為了方便起見,迴圈部分均被括號括起來了。 有前導0或後導0的例子:09.400(輸出47/5) 純迴圈小數的例子:0.(3)(輸

hdu 1717 小數分數

數學 題目分析:會補上的…… code: #include <iostream> #include <algorithm> #include <string> using namespace std; long long gcd(lo

HDU1717 (迴圈小數分數)

題目連結: 分析: 我們將這個迴圈小數分成三部分0.a1a2a3a4....an(b1b2bb3...bm) 分成0,不迴圈的部分a1a2...an,和迴圈節b1b2b3...bm 設這個小數為X

小數分數解題報告---模擬

Q - 小數化分數2 Description Ray 在數學課上聽老師說,任何小數都能表示成分數的形式,他開始了化了起來,很快他就完成了,但他又想到一個問題,如何把一個迴圈小數化成分數呢?  請你寫

第7課 列表初始2)_分析initializer_list<T>的實現

定義 找到 code 元素 arr except 等價 地址 -a 1. 初始化列表的實現 (1)當編譯器看到{t1,t2…tn}時便會生成一個initializer_list<T>對象(其中的T為元素的類型),它關聯到一個array<T,n>。 (

禪道docker(Centos7.2)

pass 輸入 word cal aws auth gic mys 刷新 操作步驟 確認服務器禪道版本及容器禪道版本 服務器禪道版本:9.6.2 容器禪道版本:9.6.3 版本sql比對 下載官方9.6.3源碼包url:http://dl.cnezsoft.com/

空間數據可視2. 空間線性軌跡圖

控制 ack tro 編輯 map 在線 數據 select 地圖map 空間線性軌跡圖 線路數據、動態的移動的數據 如何讀取數據,線路軌跡的移動情況(包括移動的速度、顏色設置還有它的大小) data.js它是一個geojson的格式數據,地理空間的

利用Python進行資料分析——繪圖和視覺(八)(2)

1、註釋以及在Subplot上繪圖 除標準的圖表物件之外,你可能還希望繪製一些自定義的註釋(比如文字、箭頭或其他圖形等)。 註釋可以通過text、arrow和annotate等函式進行新增。text可以將文字繪製在圖表的指定座標(x, y),還可以加上一些自定義格式: In [41]: ax.t