Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output
对每一个对应的小数化成最简分数后输出,占一行。
代码如下:
#include <stdio.h>
int gcd(int a,int b);
int main(void)
{
int n;
char ch[30];
int flag,a,b,x,y,z,i,p,q;
printf("****************************小数化成最简分数****************************\n");
printf("输入的小数必须为纯小数,非循环小数直接输入,循环小数需要将循环部分括起来\n");
printf("例如:非循环小数输入式样 :0.5,0.6 循环小数输入式样 :0.(4),0.32(692307)\n");
printf("************************************************************************\n\n");
printf("请输入需要转换的个数:\n");
scanf("%d",&n);
getchar();
while(n--)
{
flag=0;
a=b=0;
x=y=1;
printf("请输入你需要转换的小数:\n");
gets(ch);
printf("转换后的最简分数为: ");
i=2;
while(ch[i]!='\0')
{
if(flag==0&&ch[i]!='(')
{
a=10*a+ch[i]-'0';
x=10*x;
}
else if(ch[i]=='(')
{
flag=1;
b=a;
y=x;
}
else if(flag==1,ch[i]!=')')
{
b=10*b+ch[i]-'0';
y=10*y;
}
i++;
}
if(flag==0)
{
p=a;q=x;
}
else
{
p=b-a;
q=y-x;
}
printf("%d/%d\n",p/gcd(p,q),q/gcd(p,q));
}
return 0;
}
int gcd(int a,int b)
{
while(a!=b)
{
if(a>b) a=a-b;
else b=b-a;
}
return a;
}
格式什么的没问题,效率和不低
追答格式没问题,效率没问题,输出结果也没问题,怎么可能通不过呢
代码我细看了下,你的 else if(flag==1,ch[i]!=')')这里括号内的逗号是不是错了?