因为输出形式也是分数
所以这一题还是挺有意思的
思路不难 数学问题
需要考虑的特殊情况
一是结果小于0
二是结果为整数
三是结果需要化简
#include<stdio.h>
int gcd(int a,int b) {
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main() {
int a,b,c,d;
char s;
while(scanf("%d/%d%c%d/%d",&a,&b,&s,&c,&d)!=EOF) {
int m,n=b*d;
a*=n/b;
c*=n/d;
if(s=='+')
m=a+c;
else {
if(a<c) {
printf("-");
m=c-a;
} else
m=a-c;
}
if(!m)
printf("0
");
else if(m%n==0) {
printf("%d
",m/n);
} else {
int t=gcd(m,n);
m/=t;
n/=t;
printf("%d/%d
",m,n);
}
}
return 0;
}
标程用的字符串记录算式
但思路还是一样的
#include<stdio.h>
char str[20];
int Gcd(int m,int n) {
if (m==0) return n;
return Gcd(n%m,m);
}
int main() {
int fz,fm,gcd;
while(scanf("%s",str)!=EOF) {
if(str[3]=='-')
fz=(str[0]-'0')*(str[6]-'0')-(str[2]-'0')*(str[4]-'0');
else fz=(str[0]-'0')*(str[6]-'0')+(str[2]-'0')*(str[4]-'0');
if(fz) {
fm=(str[2]-'0')*(str[6]-'0');
gcd=Gcd(fz,fm);
if(gcd<0) gcd=-gcd;
if(fm/gcd==1) printf("%d
",fz/gcd);
else printf("%d/%d
",fz/gcd,fm/gcd);
} else puts("0");
}
}
题目地址:【NYOJ】[111]分数加减法