小数转分数
2017-02-24 18:04
344 查看
简述
初中学数学的时候,小明最头痛的就是小数。最最头痛的就是循环小数。最最最头痛的就是老师总是喜欢让他把小数转成分数。偶尔遇到循环小数转分数的题目,小明总是想到辍学出去打工。一个初中生,出去能干什么呢?大家写段代码,帮帮这个可怜的孩子吧,他还年轻。
输入
输入包含两行,第一行为一个整数N,代表接下来有N组待转换的小数。然后为待转换的小数。每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。 注意:小数的位数不超过9位指的是输入的时候小数点后的数字的个数不超过9位,比如说0.32(692307)表示这个小数的位数是8位。
输出
对每一个对应的小数化成最简分数后输出,占一行。
样例输入
3
0.(4)
0.5
0.32(692307)
0
样例输出
4/9
1/2
17/52
直到输入待测数据组数N为0的时候,程序终止!
我的代码
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
void fun(int& a,int& b,int c,int d)
{
unsigned long long b1,a1,m,i,t1=a,t2=b,t3=c,t4=d;
b1=t2*t4,a1=t1*t4+t2*t3;
m=min(a1,b1);
for(i=2; i<=m; i++)
if(a1%i==0&&b1%i==0)
{
a1/=i;
b1/=i;
i=1;
m=min(a1,b1);
}
a=a1,b=b1;
}
int Pow(int i)
{
int t=1;
for(int j=1; j<=i; j++)
t*=10;
return t;
}
int P1(int i)
{
int t=0;
for(int j=1; j<=i; j++)
t=t*10+9;
return t;
}
int main()
{
int a,i,a1,a2,n,flag;
char s1[10],s2[10],s3[10],t;
while(cin>>n&&n)
{
getchar();
while(n--)
{
flag=0;
s1[0]=s1[0]=s3[0]=0;
i=0;
t=getchar();
if(t=='-')
flag=1;
else
s1[i++]=t;
while(1)
{
t=getchar();
if(t=='\n')
{
s1[i]=0;
goto End;
}
if(t=='.')
{
s1[i]=0;
break;
}
s1[i++]=t;
}
i=0;
while(1)
{
t=getchar();
if(t=='(')
{
s2[i]=0;
break;
}
if(t=='\n')
{
s2[i]=0;
goto End;
}
s2[i++]=t;
}
i=0;
while(1)
{
t=getchar();
if(t==')')
{
s3[i]=0;
getchar();
goto End;
}
s3[i++]=t;
}
End:
;
a1=0;
a2=1;
if(strlen(s1)!=0&&s1[0]!='0')
{
sscanf(s1,"%d",&a);
a1=a;
}
if(strlen(s2)!=0)
{
sscanf(s2,"%d",&a);
fun(a1,a2,a,Pow(strlen(s2)));
}
if(strlen(s3)!=0)
{
sscanf(s3,"%d",&a);
fun(a1,a2,a,P1(strlen(s3))*Pow(strlen(s2)));
}
if(flag)
cout<<'-';
cout<<a1<<'/'<<a2<<endl;
}
}
return 0;
}
$(".MathJax").remove();
初中学数学的时候,小明最头痛的就是小数。最最头痛的就是循环小数。最最最头痛的就是老师总是喜欢让他把小数转成分数。偶尔遇到循环小数转分数的题目,小明总是想到辍学出去打工。一个初中生,出去能干什么呢?大家写段代码,帮帮这个可怜的孩子吧,他还年轻。
输入
输入包含两行,第一行为一个整数N,代表接下来有N组待转换的小数。然后为待转换的小数。每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。 注意:小数的位数不超过9位指的是输入的时候小数点后的数字的个数不超过9位,比如说0.32(692307)表示这个小数的位数是8位。
输出
对每一个对应的小数化成最简分数后输出,占一行。
样例输入
3
0.(4)
0.5
0.32(692307)
0
样例输出
4/9
1/2
17/52
直到输入待测数据组数N为0的时候,程序终止!
我的代码
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
void fun(int& a,int& b,int c,int d)
{
unsigned long long b1,a1,m,i,t1=a,t2=b,t3=c,t4=d;
b1=t2*t4,a1=t1*t4+t2*t3;
m=min(a1,b1);
for(i=2; i<=m; i++)
if(a1%i==0&&b1%i==0)
{
a1/=i;
b1/=i;
i=1;
m=min(a1,b1);
}
a=a1,b=b1;
}
int Pow(int i)
{
int t=1;
for(int j=1; j<=i; j++)
t*=10;
return t;
}
int P1(int i)
{
int t=0;
for(int j=1; j<=i; j++)
t=t*10+9;
return t;
}
int main()
{
int a,i,a1,a2,n,flag;
char s1[10],s2[10],s3[10],t;
while(cin>>n&&n)
{
getchar();
while(n--)
{
flag=0;
s1[0]=s1[0]=s3[0]=0;
i=0;
t=getchar();
if(t=='-')
flag=1;
else
s1[i++]=t;
while(1)
{
t=getchar();
if(t=='\n')
{
s1[i]=0;
goto End;
}
if(t=='.')
{
s1[i]=0;
break;
}
s1[i++]=t;
}
i=0;
while(1)
{
t=getchar();
if(t=='(')
{
s2[i]=0;
break;
}
if(t=='\n')
{
s2[i]=0;
goto End;
}
s2[i++]=t;
}
i=0;
while(1)
{
t=getchar();
if(t==')')
{
s3[i]=0;
getchar();
goto End;
}
s3[i++]=t;
}
End:
;
a1=0;
a2=1;
if(strlen(s1)!=0&&s1[0]!='0')
{
sscanf(s1,"%d",&a);
a1=a;
}
if(strlen(s2)!=0)
{
sscanf(s2,"%d",&a);
fun(a1,a2,a,Pow(strlen(s2)));
}
if(strlen(s3)!=0)
{
sscanf(s3,"%d",&a);
fun(a1,a2,a,P1(strlen(s3))*Pow(strlen(s2)));
}
if(flag)
cout<<'-';
cout<<a1<<'/'<<a2<<endl;
}
}
return 0;
}
$(".MathJax").remove();
相关文章推荐
- 小数化成最简式分数
- VB实现小数和分数的相互转化
- 用Oracle PL/SQL 编程实现小数转分数的方法
- 如何将循环小数化为分数
- java之输入分数(小数)评等级
- 分数与小数的相互转换(模拟)
- hdu 1717 && 计蒜课 52 【分数小数的互相转化】【数论?】
- 小数转分数
- poj1930(无限循环小数化成分数)
- 分数变成小数(四舍五入)
- 习题2.9:分数化小数
- 小数化分数2
- Java将小数形式转换成分数形式
- ACM准备之路(蓝桥杯9)分数化小数
- poj 1930 Dead Fraction 数学 分数 无限循环小数
- POJ 1930 Dead Fraction(gcd—枚举循环节,无限循环小数变最简分数)
- USACO&nbsp;2.4&nbsp;分数化小数
- 【循环小数性质】HDU 1717——小数化分数2
- usaco ★Fractions to Decimals 分数化小数