视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
HDOJ1717小数化分数2
2020-11-09 07:57:46 责编:小采
文档


链接:http://acm.hdu.edu.cn/showproblem.php?pid=1717 题目: 小数化分数2 Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2920Accepted Submission(s): 1186 Problem Description Ray 在数学课

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1717

题目:

小数化分数2

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


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


题意:将一个小数化成分数形式。

解题思路:

小数(除了无限不循环小数外)都可以化成分数。1.将有限小数化成分数,方法如下:0.25 * 100 = 25;0.25 = 25 / 100(约分即可得到0.25的小数表示);2.将循环小数化成分数,方法如下:0.32(692307) * 100 = 32.692307①;0.32(692307) * 10 ^ 8 = 32692307.(692307)②; ② - ①得:0.32(692307)* (10 ^ 8 - 100) = 32692275; 0.32(692307) = 32692275 / (10 ^ 8 - 100)(约分即可得到0.32(692307)的小数形式)。

代码:

#include 
#include 

int (int m, int n)
{
 int r;
 while(n)
 {
 r = m % n;
 m = n;
 n = r;
 }
 return m;
}
int main()
{
 int t;
 scanf("%d", &t);
 getchar();
 while(t--)
 {
 char s[20];
 scanf("%s", s);
 int len = strlen(s), index = 0;
 for(int i = 0; i < len; i++)
 {
 if('(' == s[i])
 index = i;
 }
 if(index)
 {
 int a = index - 2, c = 0, f, m = 1, n = 1;
 int b = len - index - 2 + a;
 for(int i = 2; i < len - 1; i++)
 {
 if(i == index)
 {
 f = c;
 continue;
 }
 c = 10 * c + s[i] - '0';
 }
 c = c - f;
 while(a--) m *= 10;
 while(b--) n *= 10;
 int d = n - m, e = (d, c);
 printf("%d/%d\n", c/e, d/e);
 }
 else
 {
 int a = 0, b = 1, m = len - 2;
 for(int i = 2; i < len; i++)
 a = 10 * a + s[i] - '0';
 while(m--) b *= 10;
 int c = (a, b);
 printf("%d/%d\n", a/c, b/c);
 }
 }
 return 0;
}

下载本文
显示全文
专题