分数加减法
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
编写一个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
刚开始忽略了好多书写习惯,如0/1=0,2/1=2,编程时一定要考虑全面
01.
#include<iostream>
02.
#include<cstdio>
03.
using
namespace
std;
04.
05.
int
gcd1(
int
n,
int
m)
06.
{
07.
int
r,s;
08.
s=n*m;
09.
r=n%m;
10.
while
(r!=0)
11.
{
12.
n=m;
13.
m=r;
14.
r=n%m;
15.
}
16.
s/=m;
//s最小公倍数
17.
return
s;
18.
}
19.
20.
int
gcd2(
int
n,
int
m)
21.
{
22.
int
r;
23.
r=n%m;
24.
while
(r!=0)
25.
{
26.
n=m;
27.
m=r;
28.
r=n%m;
29.
}
30.
return
m;
//m最大公约数
31.
}
32.
int
main()
33.
{
34.
char
a,op;
35.
int
a1,a2,b1,b2,sum,s1,s2;
36.
while
(
scanf
(
"%d%c%d%c%d%c%d"
,&a1,&a,&a2,&op,&b1,&a,&b2)!=EOF)
37.
{
38.
int
u=0;
39.
s2=gcd1(a2,b2);
//分母的最小公倍数
40.
a1*=s2/a2;b1*=s2/b2;
41.
if
(op==
'+'
)
42.
s1=a1+b1;
43.
if
(op==
'-'
)
44.
s1=a1-b1;
45.
if
(s1<0)
46.
{
47.
u=1;
48.
s1=-s1;
49.
}
50.
int
t=gcd2(s1,s2) ;
//分子分母最大公约数
51.
s1/=t;
52.
s2/=t;
53.
if
(u)
54.
{
55.
s1=-s1;
56.
cout<<s1<<a<<s2<<endl;
57.
}
58.
else
if
(s1==0)
59.
{
60.
cout<<0<<endl;
61.
}
62.
else
if
(s1==s2)
63.
cout<<1<<endl;
64.
else
if
(s1%s2==0)
65.
cout<<s1/s2<<endl;
66.
else
67.
cout<<s1<<a<<s2<<endl;
68.
}
69.
return
0;
70.
}
-
输入包含多行数据