分数运算
时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)
题目描述
计算机中采用浮点数表示所有实数,但这意味着精度丢失。例如无法精确表示“1/3”。 NowCoder最近要处理很多金融问题,这些账目不允许出现精度丢失,因为差之毫厘谬之千里。你能帮他实现一套分数的计算器吗?
输入描述:
输入包含多组数据。 每组数据一行,包含两个分数和一个运算符,中间用空格隔开。 其中分子与分母均为不大于30的正整数。
输出描述:
对应每一组数据,输出两个分数的计算结果。 要求输出最简分数,即分子与分母互质。
输入例子:
1/3 2/3 + 1/5 1/4 - 1/2 1/3 * 2/3 4/3 /
输出例子:
1/1 -1/20 1/6 1/2
#include<stdio.h>
int gcd(int a,int b)
{
while(b!=0)
{
int r=b;
b=a%b;
a=r;
}
return a;
}
int main()
{
int a,b,c,d,s1,s2,x;
char y;
while(scanf("%d/%d%d/%d %c",&a,&b,&c,&d,&y)!=EOF)
{
if(y=='+')
{
s1=a*d+b*c;
s2=b*d;
}
if(y=='-')
{
s1=a*d-b*c;
s2=b*d;
}
if(y=='*')
{
s1=a*c;
s2=b*d;
}
if(y=='/')
{
s1=a*d;
s2=b*c;
}
x=gcd(s1,s2);
s1=s1/x;
s2=s2/x;
if(s1<0&&s2>0)
printf("-%d/%d\n",-s1,s2);
else if(s1>0&&s2<0)
printf("-%d/%d\n",s1,-s2);
else if(s1<0&&s2<0)
printf("%d/%d\n",-s1,-s2);
else
printf("%d/%d\n",s1,s2);
}
return 0;
}