题目链接: 传送门

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\n",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\n",fz/tep,fm/tep);
    }
    return 0;
}

FZU 2193 So Hard (有限小数转换最简分数)(想法题)的更多相关文章

  1. idea的mybatis的mysql语句的小数转换百分号

    其实mysql的小数转换百分数有两种函数ROUND和TRUNCATE 例子: 1.round(x,d) :用于数据的四舍五入,round(x)  ,其实就是round(x,0),也就是默认d为0: 这 ...

  2. java 小数转换成二进制

    32位单精度二进制 = [1个符号位] [8个阶码位] [23个尾数位] 64位单精度二进制 = [1个符号位] [11个阶码位] [52个尾数位] 小数 = [正负符号位]  [整数部分] . [小 ...

  3. PHP百分号转小数,php 小数转换百分数函数

    PHP百分号转小数: <?php $a = "20.544545%"; echo (float)$a/100; ?> php 小数转换百分数函数: function x ...

  4. Codeforces 984 扫雷check 欧几里得b进制分数有限小数判定 f函数最大连续子段

    A /* Huyyt */ #include <bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define mkp(a,b) ...

  5. 使用Java将阿拉伯数字转换为中文数字(适配小数转换)

    Java数字转换工具类 简介 该工具类可以将整数.小数.负数转换为中文的数字,如: 0 --> 零 1 --> 一 2.1 --> 二点一 -2.1 --> 负二点一 具体代码 ...

  6. Decimal To Fraction 小数转换成分数

    以0.25为例, 0.25 * 100 = 25, 求25 和 100 的最大公约数gcd. 25/gcd 为分子. 100/gcd为分母. //小数转分数 //0.3 -> 3/10, 0.2 ...

  7. mysql 小数转换成百分数查出(保留两位小数百分数)

    SELECT id as 'ID',GROUP_CONCAT(concat(truncate(royalties *100,2),'%')) as '比例' FROM yser FROM id in( ...

  8. PTA-7-20 表达式转换(中缀转后缀,带括号,负数,小数转换)

    本题考点:中缀表达式转后缀表达式. 难点: 带有小数的数字 数字可能带有正负号 题目描述: 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.日常使用的算术表达式是采用中缀表示法,即二元运算符位于 ...

  9. Oracle中将小数转换成字符丢零.截取小数.除数为零解决法

    如下所示,前面少个0 SQL>select money from users where username ='LEI'; money --------- .3256 解决方法: SQL> ...

随机推荐

  1. Tomcat 内存溢出对应解决方式

    1.Tomcat内存溢出的原因 生产环境中Tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三 ...

  2. 基于DDD的.NET开发框架 - ABP仓储实现

    返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...

  3. 封装好的socket,拿去用

    年终有空咯,分享一下自己封装的socket类库. 由于公司写的socket代码非常醉人,我不能忍,所以自己封装了一下方便大家使用,现在有空也分享给园友用用看,现在还存在一定的问题,等下我列出来,希望大 ...

  4. 子Div使用Float后如何撑开父Div

    如果想要撑开父元素可以采用以下方法: 方法一: 父元素设置overflow以及zoom,样式如下: 1 <style> 2   #div1{border:1px solid red;ove ...

  5. List<T>与Dictionary<string,T>频繁检索的性能差距

    一直对LINQ简洁高效的语法青睐有加,对于经常和资料库,SQL语法打交道的C#开发者来说,LINQ无疑是一个非常不错的选择,当要在List<T>(T为一个普通对象)集合中查找满足某些条件的 ...

  6. Java 增强型的for循环 for each

    Java 增强型的for循环 for each For-Each循环 For-Each循环也叫增强型的for循环,或者叫foreach循环. For-Each循环是JDK5.0的新特性(其他新特性比如 ...

  7. java 环境配置

    ​'JAVAC' 不是内部或外部命令解决方法 'JAVAC' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 'JAVA' 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法相似. ...

  8. 如何在word中的第3+n页处插入页面并重新从1开始

    在插入页码时有时可能会遇到这种情况: word的第一页是文档名称 第二页是目录 第三页才开始是正文,而我们希望看到页码从第三页开始才是第1页. 在第三页的开头,插入分隔符“下一页”,如果office2 ...

  9. Android NestedScrolling与分发机制

    在Android5.0之间要实现控件的嵌套滑动,都是要自己处理View事件即分发机制. 共有三个方法:    dispatchTouchEvent().onInterceptTouchEvent()和 ...

  10. SharedPrefernces使用实例讲解

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...