GitBook

这里写图片描述 这里写图片描述

因为输出形式也是分数 所以这一题还是挺有意思的

思路不难 数学问题 需要考虑的特殊情况 一是结果小于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\n");
		else if(m%n==0) {
			printf("%d\n",m/n);
		} else {
			int t=gcd(m,n);
			m/=t;
			n/=t;
			printf("%d/%d\n",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\n",fz/gcd);
			else printf("%d/%d\n",fz/gcd,fm/gcd);
		} else puts("0");
	}
}

题目地址:【NYOJ】[111]分数加减法