6 条题解

  • 0
    @ 2025-11-14 20:39:03
    #include <stdio.h>
    int main() {
    	int a, b, c, d;
    	char m;
    	while (scanf("%d/%d%c%d/%d", &a, &b, &m, &c, &d) != EOF) {
    		if (m == '+') {
    			int zi = a * d + b * c;
    			int mu = b * d;
    			int p, q;
    			int g = mu, temp;
    			int x = zi;
    			while (x != 0) {
    				temp = g % x;
    				g = x;      //辗转相除算最大公约数
    				x = temp;
    			}
    			p = zi / g;
    			q = mu / g;
    			if (q < 0) {
    				p = -p;
    				q = -q;
    			}
    			if (q == 1) {
    				printf("%d\n", p);//特例,分母为1时
    			} else {
    				printf("%d/%d\n", p, q);
    			}
    		} else if (m == '-') {
    			int zi = a * d - b * c;
    			int mu = b * d;
    			int mu1;
    			int flag = 1;
    			if (zi < 0) {
    				mu1 = -zi;
    				flag = 0;
    			} else {
    				mu1 = zi;
    				flag = 1;
    			}
    			int g = mu, temp;
    			int x = mu1;
    			while (x != 0) {
    				temp = g % x;
    				g = x;       //同样的辗转相除
    				x = temp;
    			}
    			int p = zi / g;
    			int q = mu / g;
    			if (q < 0) {
    				p = -p;
    				q = -q;
    			}
    			if (p == 0) {
    				printf("0\n");
    			} else {
    				printf("%d/%d\n", p, q);
    			}
    
    		}
    	}
    }
    

    信息

    ID
    168
    时间
    3000ms
    内存
    128MiB
    难度
    7
    标签
    (无)
    递交数
    753
    已通过
    172
    上传者