解题报告:输入一个小于1的小数,让你把这个数转化成分数,但注意,输入的数据还有无限循环的小数,循环节用一对括号包含起来。

之前还没有写过小数转分数的题,当然如果没有循环小数的话,应该比较简单,但是这题要求有循环小数。其实这里要用到一个很巧妙的方法,这里以0.4444444....这个无限循环小数来作为例子,0.444...*10 - 0.444.... = 4,又有左边的0.444...可以提出来,所以得到:

0.444....(10-1) = 4;

即0.444....*9 = 4,

所以无限循环小数就可以表示为4/9,如果循环节前还有数字的话,只要把前面的那部分分离出来,分别转化,然后把两个分数加起来就可以了。

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
typedef __int64 INT; //最好用__int64,一开始没用,一出现大数就溢出了
INT f[] = {,,,,,,,,,};
INT GCD(INT a,INT b) {
return a%b==? b:GCD(b,a%b);
} int main() {
int t;
INT a,b,c,d;
char S[],T[];
scanf("%d",&t);
while(t--) {
scanf("%s",S);
a = c = ; //分子一律初始化为0
b = d = ; //分母一律初始化为1
INT loc1 = ,loc2 = ,len = strlen(S),k = ,flag = ;
for(int i = ;i<len;++i) {
if(flag)
T[k++] = S[i];
if(S[i] == '(') { //标记括号的位置以及否有循环
loc1 = i;
flag = ;
}
}
T[k-] = NULL;
int lent = strlen(T);
if(flag) { //求循环部分的分数
c = atoi(T);
d = f[lent] - ;
}
if(loc1 > || !flag) {
if(flag)
S[loc1] = NULL;
int lens = strlen(S+);
d *= f[lens]; //这个部分别忘了,当小数点后面有不循环的部分时,循环部分要缩小相应的倍数
a = atoi(S+);
b = f[lens];
}
INT A = a*d + b*c;
INT B = b*d;
INT C = A;
A = A /= GCD(A,B);
B /= GCD(C,B);
printf("%I64d/%I64d\n",A,B);
}
return ;
}

HDU 1717 小数化分数2 数学题的更多相关文章

  1. HDU 1717 小数化分数2(最大公约数)

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

  2. 【HDU】1717 小数化分数2 ——计数原理

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

  3. hdu 1905 小数化分数2

    ;}

  4. 【HDOJ】1717 小数化分数2

    简单字符串处理. #include <cstdio> #include <cstring> #include <cmath> #include <ctype. ...

  5. HDU1717小数化分数2

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

  6. 紫书 习题8-14 UVa 1616(二分+小数化分数+精度)

    参考了https://www.cnblogs.com/dwtfukgv/p/5645446.html (1)直接二分答案.说实话我没有想到, 一开始以为是贪心, 以某种策略能得到最优解. 但是想了很久 ...

  7. CSU 8月月赛 Decimal 小数化分数

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1303 这个OJ很容易跪所以我贴一下题目 Description 任意一个分数都是有理数,对于任意一 ...

  8. 杭电oj1717——小数化分数(java实现)

    question:小数化分数2 思路: /** * 这道题没有整数部分(有也无所谓,算小数部分,算完了分子分母按倍数加上就好),也就是说数组直接从a[2]开始后面是小数,我把这道题分为了三类: * * ...

  9. (小数化分数)小数化分数2 -- HDU --1717

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1717 举例: 0.24333333…………=(243-24)/900=73/3000.9545454…… ...

随机推荐

  1. 移动端-webkit-user-select:none导致input/textarea输入框无法输入

    这个问题,也算是个大坑了. 最开始的开始,是因为我们在做大装盘活动的时候,发现在ios上面出现了这样的问题:点击“转”按钮,ios上面会有延迟并且会出现图片的阴影,这个肯定就不好看了撒,然后,找吧,改 ...

  2. 【SQLSERVER】动态游标的实现

    方法1: CREATE   TABLE   #tabTmp(id   int)    INSERT   #tabTmp   EXECUTE('SELECT   id   FROM   '+@Table ...

  3. ACM数论之旅1---素数(万事开头难(>_<))

    前言:好多学ACM的人都在问我数论的知识(其实我本人分不清数学和数论有什么区别,反正以后有关数学的知识我都扔进数论分类里面好了) 于是我就准备写一个长篇集,把我知道的数论知识和ACM模板都发上来(而且 ...

  4. 嵌套的 ajax 请求

    今天看到了一个嵌套的ajax,算是长见识了. 不过看一眼就知道怎么回事了. 不是不会,就怕想不到. //发送一个ajax请求,嵌套的ajax请求 'ajaxCall': function(url1, ...

  5. 栈java实现

    这几天,过得挺充实的,每天都在不停的上课,早上很早就起来去跑步,晚上到图书馆看书.一边紧张的学习,一边在默默的备战软考.最近还接手了一个公司官网的建设.这是我在川信最后的一个完整学期了,每件事我都要认 ...

  6. Smallest Minimum Cut HDU - 6214(最小割集)

    Smallest Minimum Cut Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Oth ...

  7. Joseph's Problem UVALive - 3521(等差数列的应用)

    题意:给定n, k,求出∑ni=1(k mod i) 思路:由于n和k都很大,直接暴力是行不通的,然后在纸上画了一些情况,就发现其实对于k/i相同的那些项是形成等差数列的,于是就可以把整个序列进行拆分 ...

  8. 【BZOJ1455】罗马游戏(左偏树)

    [BZOJ1455]罗马游戏(左偏树) 题面 BZOJ 然而权限题. 题解 左偏树模板题. #include<iostream> #include<cstdio> #inclu ...

  9. python之旅:函数基础

    一.引子 1.函数是什么 用函数与不用函数 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一 ...

  10. JavaScript搜索关键字高亮的实现

    高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色.一般在搜索结果页面会经常用到这个功能. 下面就为大家提供一种解决方案,用javascript实现. 首先在<head> ...