分数加减法
2017-01-02 09:15
134 查看
描述
编写一个C程序,实现两个分数的加减法
输入输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
输出对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
样例输出
思路:
还以为比较简单,结果折腾一个早上。。。注意细节,当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程序,实现两个分数的加减法
输入输入包含多行数据
每行数据是一个字符串,格式是"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;
}