分数加减法(3979)
时间:2011-04-13 来源:cpoint
分数加减法
Description
编写一个C程序,实现两个分数的加减法
Input
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
Output
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
Sample Input
1/8+3/8
1/4-1/2
1/3-1/3
Sample Output
1/2
-1/4
0
#include<math.h>
#define N 10
int gcd(int a,int b)
{
int r,t;
if(a<b)
{
t=a;
a=b;
b=t;
}
while(b)
{
r=a%b;
a=b;
b=r;
}
return a;
}
int lcm(int m,int n)
{
int a;
a=gcd(m,n);
return n*(m/a);
}
int main()
{
char s[N];
int a,b,c,d;
int m,n,t;
while(scanf("%s",s)!=EOF)
{
a=s[0]-'0';
b=s[2]-'0';
c=s[4]-'0';
d=s[6]-'0';
m=lcm(b,d);
if(s[3]=='+')
n=a*(m/b)+c*(m/d);
else
n=a*(m/b)-c*(m/d);
t=gcd(m,n);
m=m/t;
n=n/t;
if(n==0)
printf("%d\n",0);
else if(m==1)
{
printf("%d\n",n);
}
else
{
if(m<0)
{
printf("%d",-n);
printf("%c",'/');
printf("%d\n",-m);
}
else
{
printf("%d",n);
printf("%c",'/');
printf("%d\n",m);
}
}
}
return 0;
AC code:
#include<stdio.h>#include<math.h>
#define N 10
int gcd(int a,int b)
{
int r,t;
if(a<b)
{
t=a;
a=b;
b=t;
}
while(b)
{
r=a%b;
a=b;
b=r;
}
return a;
}
int lcm(int m,int n)
{
int a;
a=gcd(m,n);
return n*(m/a);
}
int main()
{
char s[N];
int a,b,c,d;
int m,n,t;
while(scanf("%s",s)!=EOF)
{
a=s[0]-'0';
b=s[2]-'0';
c=s[4]-'0';
d=s[6]-'0';
m=lcm(b,d);
if(s[3]=='+')
n=a*(m/b)+c*(m/d);
else
n=a*(m/b)-c*(m/d);
t=gcd(m,n);
m=m/t;
n=n/t;
if(n==0)
printf("%d\n",0);
else if(m==1)
{
printf("%d\n",n);
}
else
{
if(m<0)
{
printf("%d",-n);
printf("%c",'/');
printf("%d\n",-m);
}
else
{
printf("%d",n);
printf("%c",'/');
printf("%d\n",m);
}
}
}
return 0;
}
相关阅读 更多 +