您的位置:首页 > 编程语言 > C语言/C++

分数加减法

2017-01-02 09:15 134 查看
描述
编写一个C程序,实现两个分数的加减法

输入输入包含多行数据 

每行数据是一个字符串,格式是"a/boc/d"。 

其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 

数据以EOF结束 

输入数据保证合法
输出对于输入数据的每一行输出两个分数的运算结果。 

注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
1/8+3/8
1/4-1/2
1/3-1/3


样例输出
1/2
-1/4
0


思路:

        还以为比较简单,结果折腾一个早上。。。注意细节,当2/1+3/1的结果不是5/1而是5,分子分母同为0就直接得0

代码:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int f1(int b,int d,int n)
{
int t,s;
if (b<d)
{
t=b;b=d;d=t;
}
s=b*d;
while (d)
{
t=b%d;
b=d;
d=t;
}
if (n==0)
return b;
if (n==1)
return s/b; //最小公倍
}
int main()
{
int a,b,c,d,s,fz,t;
char x,y,z;
while (scanf("%d%c%d%c%d%c%d",&a,&x,&b,&y,&c,&z,&d)!=EOF)
{
if (a==0&&c==0)
{
printf("0\n");
}
else
{
if (b!=d)
{
s=f1(b,d,1); //最小共倍数
a=a*(s/b); //通分后的a
c=c*(s/d); //通分后的c
b=d=s;
}
else
s=b;
if (y=='+')
{
fz = a+c;
}
else
{
fz = a-c;
}
t=f1(fz,s,0);
if (fz==0)
printf("0\n");
else if (t>1)//不是最简分式
{
fz=fz/t;
s=s/t;
if (s!=1)
printf("%d/%d\n",fz,s);
else
printf("%d\n",fz);
}
else
{
if (s!=1)
printf("%d/%d\n",fz,s);
else
printf("%d\n",fz);
}

}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言