循环小数化分数
①纯循环小数化分数
纯循环小数化分数,分子就是一个循环节的数字所组成的数,分母的各位数字都是9,9的个数等于一个循环节数字的个数,能约分的要约分。
例1: 把0.7化成分数。
0.7×10=7.777……①
0.7=0.777……②
由①—②得 0.7×9=7
所以 0.7=7/9
例2: 把5.1 2 3化成分数。
0.123×1000=123.123123……①
0.1 2 3=0.123123……②
由①—②得:
. .
0.1 2 3×999=123
所以
. .
0.1 2 3=123/999
②混循环小数化分数,第二个循环节以前的小数部分的数字所组成的数,减去小数部分中不循环部分的数字所组成的数而得到的差作分子,分母的头几位数字是9,末几位数字是0,9的个数和一个循环节的位数相同,0的个数和不循环部分的位数相同。
例如: 把0.478化成分数。
0.478×1000=478.7878……①
0.478×10= 4.7878……②
由①—②得:
0.478×990=474
所以
0.478=474/990
例如: 把0.421化成分数
0.421×1000=421.11111……①
0.421×100=42.11111……②
由①—②得:
0.421×900=421—42=379所以
0.421=379/900
——————————————————————————————————————————————————————————————
十多天没刷题了!!!手都生了!!!
这题不是很难,主要是找到小数化成分数的技巧!!!
由于自己的粗心有一个地方的输出的数字没有化简导致错了好多次(囧)!!!
还是要努力呀!!!!
————————————————————————————————————————————————————————————————————
#include<stdio.h>
#include<string.h>__int64 P(__int64 a,__int64 b)
{
__int64 t,r;
if(a<b)
{
t=a;a=b;b=t;
}
do
{
r=a%b;
a=b;
b=r;
}while(r!=0);
return a;
}
int main()
{
__int64 T,len,i,flag,num1,num2,j,q,gcd,flag2,nu1,nu2,n1,n2;
char str[50],str1[50],str2[50];
scanf("%I64d",&T);
while(T--)
{
scanf("%s",str);
flag=0;
len=strlen(str);
if(str[len-1]==')')
flag=1;
if(flag)
{
for(i=0;i<len-1;i++)
if(str[i]=='(')
break;
q=0;
for(j=i+1;j<len-1;j++)
{
str1[q]=str[j];
q++;
}
num1=0;num2=0;
for(j=0;j<q;j++)
num1=num1*10+(str1[j]-'0');
for(j=0;j<q;j++)
num2=num2*10+9;
gcd=P(num1,num2);
num1/=gcd;num2/=gcd;
}
q=0;flag2=0;
for(i=2;i<len;i++)
{
if(str[i]=='(')
break;
str2[q]=str[i];
q++;
}
nu1=0;nu2=1;
for(i=0;i<q;i++)
{
nu1=nu1*10+(str2[i]-'0');
nu2=nu2*10;
}
if(nu1==0)
{
flag2=0;
for(i=0;i<q;i++)
num2*=10;
q=0;
}
if(q>=1)
{
flag2=1;
gcd=P(nu1,nu2);
nu1/=gcd;nu2/=gcd;
}
if(flag2&&!flag)
{
gcd=P(nu1,nu2);
nu1/=gcd;nu2/=gcd;
printf("%I64d/%I64d\n",nu1,nu2);
}
if(flag&&!flag2)
{
gcd=P(num1,num2);
num1/=gcd;num2/=gcd;
printf("%I64d/%I64d\n",num1,num2);
}
if(flag&&flag2)
{
for(i=0;i<q;i++)
num2=num2*10;
n2=num2*nu2;
n1=num1*nu2+nu1*num2;
gcd=P(n1,n2);
n1/=gcd;n2/=gcd;
printf("%I64d/%I64d\n",n1,n2);
}
}
return 0;
}
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1717