[原创]hdu 1717 && 计蒜课 52 【分数小数的互相转化】【数论?】

2016-06-07 10:37:00 Tabris_ 阅读数:477


博客爬取于2020-06-14 22:44:23
以下为正文

版权声明:本文为Tabris原创文章,未经博主允许不得私自转载。
https://blog.csdn.net/qq_33184171/article/details/51596858


本帖研究的是小数化分数分数化小数

小数化分数 :http://acm.hdu.edu.cn/showproblem.php?pid=1717
分数化小数 : http://nanti.jisuanke.com/t/42

这里的小数包括循环小数 循环部分用"()" 括起来 For Example 1/3 = 0.(3) 。。。

小数化分数的性质如下 :

1、有限小数的话把小数点后面的数除以10(一位数).100(两位数).1000(三位数)等,
2、如果是无限循环小数那就把循环的数除以9、99、999(同上)
3、如果是混循环小数,循环数字为两位情况下不循环的数字一位则除以990,两位则9900,并加上不循环小数数值乘以990或者9900。
即:分子=不循环部分和循环部分连起来-不循环部分。分母=99…(循环位数)0…(不循环位数)

小数化分数

小数化分数就是
0.abcd(efghij)

(abcdefghij-abcd)/9999990000 (没有约分)

在代码处理中 应该用字符串输入 ;
还有即使pow函数要慎用。。。

附代码。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# include <cstring>
# include <cstdlib>
# include <algorithm>
# include <cstdio>
# include <string>
# include <iostream>
# include <math.h>
using namespace std;

/*
分子=不循环部分和循环部分连起来-不循环部分。
分母=99..(循环位数)0..(不循环位数)
*/

int gcd(int a,int b)
{
if(b==0) return a;
else return gcd(b,a%b);
}

int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);

char s[100];
int t;
scanf("%d\n",&t);
while( t-- )
{
scanf("%s",s);
int l=strlen(s);
int kuo=0;

int n1=0,n2=1;
for(int i=2; i<l; i++)
{
n1=n1*10+s[i]-'0';
n2*=10;
if(s[i]=='(')
{
kuo=1;
break;
}
}

if(kuo)
{
int t1=0,t2=0;
int l1=0,l2=0;
int nnnn=1;

int num=0,nu = 0;

int flag=0;
for(int i=2; i<l; i++)
{
if(s[i]>='0'&&s[i]<='9')
{
if(!flag)
{
l1++;
nnnn*=10;
t1=t1*10+s[i]-'0';
}
else
{
num*=10;

nu=nu*10+9;

l2++;
t2=t2*10+s[i]-'0';
}
}
else
{
if(!flag)
num=t1;
num+=t2;
flag=1;

}
}


num-=t1;
nu=nu*nnnn;

int gcdd=gcd(num,nu);
printf("%d/%d\n", num/gcdd, nu/gcdd);
}
else
{
int gc=gcd(n1,n2);
printf("%d/%d\n", n1/gc, n2/gc );
}


}
return 0;
}

分数化小数

这个暂时还没弄明白 ,,莫着急、、、

分数化小数代码


1