• FZU 2193 So Hard (有限小数转换最简分数)(想法题)


    题目链接: 传送门

    So Hard

    Time Limit: 1000MS     Memory Limit: 65536K

    题目描述

    请将有限小数化为最简分数。

    输入

    一个整数n 表示需要转化的小数个数; 接下来n行,每行有一个有限小数。(保证小数位数不超过9位)

    输出

    输出有n行,每行为小数对应的最简分数

    输入示例

    2
    0.5
    0.4

    输出示例

    1/2
    2/5

    Hint

    注意精度问题,数据保证不会有类似1.0的小数。

    思路

    将小数扩大至整数,然后求出这个整数与扩大倍数的最大公因数,除一下,得到最简分数。
    具体细节看代码注释

    #include<stdio.h>
    
    int gcd(int m,int n)
    {
    	int tmp;
    	if (m < n)
    	{
    		tmp = m;
    		m = n;
    		n = tmp;
    	}
    	
    	if (m % n == 0)
    	{
    		return n;
    	}
    	else
    	{
    		return gcd(n,m%n);
    	}
    }
    
    int main()
    {
    	int N,i;
    	
    	scanf("%d",&N);
    	
    	while (N--)
    	{
    		double num1,num2;
    		int sum1,sum2 = 1,fac;
    		
    		scanf("%lf",&num1);
    		
    		for (i = 1;i <= 9;i++)
    		{
    			num1 *= 10;
    			sum2 *= 10;
    			num2 = num1 + 0.000001;    //由于double类型的精度问题,如“1”,double可能以“0.99999……”保存,
    			                           // 所以加一个极小的小数使之能得到想要的整数 
    			if (num1 - (int)num2 <= 0.000001)   //还是由于double的精度问题,可能printf输出的num1值和(int)num2)值 
    			{                                   //相同 ,但是内部这两个数由于小数位的问题是不等的,判断相等方法就用二者差值是否极小 
    				break;
    			}
    		}
    		
    		sum1 = (int)num2;
    		
    		fac = gcd(sum1,sum2);
    		
    		printf("%d/%d
    ",sum1/fac,sum2/fac);
    	}
    	
    	return 0;
    }
    
    #include<bits/stdc++.h>
    typedef  __int64 ll; 
    #define eps 1e-11
    using namespace std;
    
    ll gcd(ll a,ll b)
    {
        return b==0?a:gcd(b,a%b);
    }
    
    
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            double x;
            scanf("%lf",&x);
            ll fz=(ll)((x+eps)*1000000000);
            ll fm=1000000000;
            ll tep=gcd(fz,fm);
            printf("%I64d/%I64d
    ",fz/tep,fm/tep);
        }
        return 0;
    }
    
    
  • 相关阅读:
    HDU 1385 Minimum Transport Cost
    TOJ 3488 Game Dice
    TOJ 1717 WOJ
    POJ 2553 The Bottom of a Graph
    TOJ 1836 Play on Words
    利用OpenCV建立视差图像
    分享一个PyTorch医学图像分割开源库
    WACV 2021 论文大盘点-图像分割篇
    SolidWorks动画教程(1):简单动画制作
    VS2013安装及破解教程
  • 原文地址:https://www.cnblogs.com/ZhaoxiCheung/p/5399930.html
Copyright © 2020-2023  润新知