[Acm] foj 2193 : So Hard(水題)

Problem 2193 So Hard
Accept: 35 Submit: 87
Time Limit: 1000 mSec Memory Limit : 32768 KBios

Problem Description數組

請將有限小數化爲最簡分數。
Inputspa

一個整數n 表示須要轉化的小數個數; 接下來n行,每行有一個有限小數。(保證小數位數不超過9位)
Output設計

輸出有n行,每行爲小數對應的最簡分數
Sample Inputcode

2
0.5
0.4
Sample Outputip

1/2
2/5
Hintstring

注意精度問題,數據保證不會有相似1.0的小數。
Sourceit

福州大學第十二屆程序設計競賽io


題意:

給你一個小數,將它轉換成最簡分數的形式。程序設計

思路:

將這個小數做爲字符數組讀進來,分別取出整數和小數部分。
在取出小數部分的時候,同時從1累乘10獲得一個值,例如0.123,則累乘獲得1000。
接下來將這個累乘獲得的數和小數部分求最大公約數,而後分別除以他們的最大公約數,獲得的值做爲分子、分母。
整數部分 * 分母 + 分子 做爲 新的分子。
最後輸出 新的分子 / 分母。

代碼:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

int gcd(int n,int m)
{
    while(n%m){
        int t = n%m;
        n = m,m = t;
    }
    return m;
}

int main()
{
    int n;
    scanf("%d",&n);
    while(n--){
        char s[200]={0};
        scanf("%s",s);
        int i;
        int zz = 0,zi = 0,mu = 1;
        for(i=0;s[i];i++){
            if(s[i]=='.')
                break;
            zz = zz*10+s[i]-'0';
        }
        for(i++;s[i];i++){
            zi = zi*10+s[i]-'0';
            mu*=10;
        }
        int t = gcd(zi,mu);
        zi/=t;
        mu/=t;
        zi+=zz*mu;
        printf("%d/%d\n",zi,mu);
    }
    return 0;
}
相關文章
相關標籤/搜索