首页 技术 正文
技术 2022年11月15日
0 收藏 540 点赞 5,050 浏览 1559 个字

小数化分数2

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

Problem DescriptionRay 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。 Input第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。 Output对每一个对应的小数化成最简分数后输出,占一行。 Sample Input30.(4)0.50.32(692307) Sample Output4/91/217/52 Source2007省赛集训队练习赛(2) Recommendlcy   |   We have carefully selected several similar problems for you:  1715 1716 1166 1719 1722  题解:首先要知道无限循环小数分数形式的构造方法:分子为最小循环节,分母为对应位数的99..9 如已知无限循环小数:0.568568……以568为循环节,那么这个小数的分数形式就是568/999,题中,我们将小数的有限部分和无限循环部分分开处理,得到两个分数,再相加化简,所得即为所求。 代码如下:

 #include <cstdio>
#include <cstring> typedef long long ll; const int LEN = ; char num[LEN];
ll a, b, c, d, e, f; //形如a/b, c/d, e/f的分数 ll diypow(int n) //求10的n次方
{
ll ans = ;
for(int i = ; i < n; i++)
ans *= ;
return ans;
} ll gcd(ll x, ll y) //最大公约数
{
while(x != y){
if (x > y)
x -= y;
else
y -= x;
}
return x;
} void cacnum() //处理输入的数,将其有限小数部分以及无限循环部分分别用分数表示
{
a = b = c = d = ;
int len1 = , len2 = ; //len1 len2分别是有限小数部分分子的长度和无限小数循环节的长度
int len = strlen(num);
for(int i = ; i < len; i++){
if (num[i] == '('){
len2 = len - i - ;
len1 = i - ;
break;
}
if (i == len-){
len1 = i - ;
}
}
if (num[] == '(')
sscanf(num, "0.(%I64d)", &c);
else
sscanf(num, "0.%I64d(%I64d)", &a, &c); //正则表达式读入
if (len1 != )
b = diypow(len1);
if (len2 != ){
d = diypow(len2) - ;
d *= diypow(len1); //构造分母
}
} int main()
{
//freopen("in.txt", "r", stdin);
int T;
scanf("%d", &T);
while(T--){
scanf("%s", num);
cacnum();
if (a != && c != ){ //如果既有有限部分又有无限部分,两个分数相加
e = a * d / b + c;
f = d;
}
else if (a == ){
e = c;
f = d;
}
else if (c == ){
e = a;
f = b;
}
ll g = gcd(e, f); //取分子分母的最大公约数用来化简
printf("%I64d/%I64d\n", e / g, f / g);
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,413
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,186
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905