8 条题解

  • 2
    @ 2025-10-6 16:18:33
    #include<stdio.h>
    #include<stdlib.h>
    int gcd(int A,int B){//最大公约数
        int temp;
        A=abs(A);
        B=abs(B);
        while(B!=0){
            temp=B;
            B=A%B;
            A=temp;
        }return A;
    }int lcm(int c,int d){//最小公倍数
        return c*d/gcd(c,d);
    }
    int main()
    {
        int a,b,c,d;
        char n;
        while(scanf("%d/%d%c%d/%d",&a,&b,&n,&c,&d)!=EOF){
            int mu=lcm(b,d);
            int zi;
            if(n=='+'){
                zi=a*(mu/b)+c*(mu/d);//分数分子相加减法(下同)
            }else{
                zi=a*(mu/b)-c*(mu/d);
            }int same=gcd(zi,mu);//进行约分
            zi=zi/same;
            mu=mu/same;
            if(zi==0){//分类讨论
                printf("0\n");
            }else if(mu==1){
                printf("%d\n",zi);
            }else{
                printf("%d/%d\n",zi,mu);
            }
        }
        return 0;
    }
    
    • 1
      @ 2025-12-4 23:22:12
      #include <stdio.h>
      #include <stdlib.h>
      int main(){
          int a,b,c,d;
          int m,n;
          int x,j,l,k;
          char e,f,g;
          while(scanf("%d%c%d%c%d%c%d",&a,&e,&b,&f,&c,&g,&d)!=EOF){
              if(f=='+'){m=a*d+b*c;n=b*d;}
              else {m=a*d-b*c;n=b*d;}
              k=abs(m);l=abs(n);
              int t;
              while(l!=0){
                  t=k%l;
                  k=l;
                  l=t;
              }
              if(m==0)printf("0\n");
              else {
                  x=n/k;j=m/k;
                  if(x<0){
                      j=-j;
                      x=-x;
                  }
                  if(x==1)
                  printf("%d\n",j);
                  else printf("%d/%d\n",j,x);
              }
          }
          return 0;
      }
      
      • 1
        @ 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);
        			}
        
        		}
        	}
        }
        
        • 0
          @ 2025-11-30 12:34:45

          三目运算的话代码更短

          #include<string.h>
          int gcd(int x,int y){
          	if(y==0)return x;
          	else return gcd(y,x%y);
          }
          int main(){
          	int a,b,c,d;
          	char sb;
          	while(scanf("%d/%d%c%d/%d",&a,&b,&sb,&c,&d)!=EOF){
          		int z;
          		int m;
          		if(sb=='+'){
          			z=a*d+b*c;
          		}
          		if(sb=='-'){
          			z=a*d-b*c;
          		}
          		m=b*d;
          		if(z==0){
          			printf("0\n");
          			continue;
          		}
          		int g;
          		if(z>0){
          			g=gcd(z,m);
          		}
          		if(z<0){
          			g=gcd(-z,m);
          		}
          		z/=g;
          		m/=g;
          		if(m==1){
          			printf("%d\n",z);
          		}
          		else{
          			printf("%d/%d\n",z,m);
          		}
          	}
          	return 0;
          }
          
          • 0
            @ 2025-10-5 23:44:21

            #include<stdio.h>

            int main(){

            char x[8];

            int a,b,n,m,g,sum,t;

            while(scanf("%s",x)!=EOF){

            a=x[0]-'0';

            b=x[2]-'0';

            n=x[4]-'0';

            m=x[6]-'0';

            for(int i=b;i>=b;i++){

            if(i%b0&&i%m0){

            g=i;

            break;

            }

            }

            a=a*(g/b);

            n=n*(g/m);

            if(x[3]=='+'){

            sum=a+n;

            if(sum==0){

            printf("0\n");

            continue;

            }

            if(sum%g==0){

            printf("%d\n",sum/g);

            continue;

            }

            int y=g;

            while(y!=0){

            t=sum%y;

            sum=y;

            y=t;

            }

            g=g/sum;

            sum=(a+n)/sum;

            printf("%d/%d\n",sum,g);}

            if(x[3]=='-'){

            sum=a-n;

            if(sum==0){

            printf("0\n");

            continue;

            }

            if(sum<0){

            sum=0-sum;

            }

            int y=g;

            while(y!=0){

            t=sum%y;

            sum=y;

            y=t;

            }

            g=g/sum;

            sum=(a-n)/sum;

            printf("%d/%d\n",sum,g);

            }

            }

            return 0;

            }

            • 0
              @ 2025-9-13 23:28:06
              #include <bits/stdc++.h>
              using namespace std;
              
              
              int main(){
                  int a, b, c, d;
                  char op;
                  int fenmu, fenzi;
                  while(~scanf("%d/%d%c%d/%d", &a, &b, &op, &c, &d)) {
                      fenmu = b * d;
                      if (op == '+') {
                          fenzi = a * d + b * c;
                      } else {
                          fenzi = a * d - b * c;
                      }
                      if (fenzi == 0) {
                          cout << "0\n";
                      } else {
                          int g = gcd(fenmu, fenzi);
                          fenzi /= g;
                          fenmu /= g;
                          if (fenmu == 1) {
                              cout << fenzi << '\n';
                          } else {
                              cout << fenzi << '/' << fenmu << '\n';
                          }
                      }
                  }
                  return 0;
              }
              
              • 0
                @ 2024-12-11 12:29:42

                #include<stdio.h>

                int main() { int t; char s[100]; int a[100]; while (scanf("%s", s) != EOF) { a[0] = s[0] - '0'; a[2] = s[2] - '0'; a[4] = s[4] - '0'; a[6] = s[6] - '0'; int fm = a[2] * a[6]; int fz1 = a[0] * a[6]; int fz2 = a[4] * a[2]; int fzh = fz1 + fz2; int fzc = fz1 - fz2; if (a[2] == a[6]) { if (s[3] == '+') { int p = a[0] + a[4]; for (int k = p; k >= 1; k--) { if (p % k == 0 && a[2] % k == 0) { p = p / k; a[2] = a[2] / k; break; } } if (a[2] == 1) { printf("%d\n", p); } else { printf("%d/%d\n", p, a[2]); }

                } if (s[3] == '-') { if (a[0] == a[4]) { printf("0"); } else if (a[0] > a[4]) { int p = a[0] - a[4]; for (int k = p; k >= 1; k--) { if (p % k == 0 && a[2] % k == 0) { p = p / k; a[2] = a[2] / k; break; } } if (a[2] == 1) { printf("%d\n", p); } else { printf("%d/%d\n", p, a[2]); } } else { int p = a[4] - a[0]; for (int k = p; k >= 1; k--) { if (p % k == 0 && a[2] % k == 0) { p = p / k; a[2] = a[2] / k; break; } } if (a[2] == 1) { printf("%d\n", a[4] - a[0]); } else { printf("-%d/%d\n", a[4] - a[0], a[2]); }

                } } } else { if (s[3] == '+') { for (int k = fzh; k >= 1; k--) { if (fzh % k == 0 && fm % k == 0) { fzh = fzh / k; fm = fm / k; break; } } if (fm == 1) { printf("%d\n", fzh); } else { printf("%d/%d\n", fzh, fm); }

                }
                if (s[3] == '-') {
                	if (fzc == 0) {
                		printf("0");
                	} else if (fzc > 0) {
                		for (int k = fzc; k >= 1; k--) {
                			if (fzc % k == 0 && fm % k == 0) {
                				fzc = fzc / k;
                				fm = fm / k;
                				break;
                			}
                		}
                		if (fm == 1) {
                			printf("%d\n", fzc);
                		} else {
                			printf("%d/%d\n", fzc, fm);
                		}
                
                	} else if (fzc < 0) {
                		fzc = -fzc;
                		for (int k = fzc; k >= 1; k--) {
                			if (fzc % k == 0 && fm % k == 0) {
                				fzc = fzc / k;
                				fm = fm / k;
                				break;
                			}
                		}
                		if (fm == 1) {
                			printf("-%d\n", fzc);
                		} else {
                			printf("-%d/%d\n", fzc, fm);
                		}
                
                	}
                }
                

                }

                }

                return 0;

                }

                • @ 2024-12-11 12:30:04

                  硬上

              • 0
                @ 2024-12-7 16:33:45

                `#include<stdio.h> #include<math.h> #include<string.h>

                int GCD(int a,int b)//求最大公因数的函数 { a= abs(a);//整数的绝对值 b = abs(b); if(b0) { return a; }else { return GCD(b,a%b); } } int main() { int a,b,c,d;//a,c做分子,b,d做分母 char s;//加号或者减号 int gcd;//公因数 int gbs;//公倍数 int fenzi;//相减或者相加后的分子 while((scanf("%d/%d%c%d/%d",&a, &b, &s, &c, &d))!=EOF) { gcd = GCD(b,d); gbs = b*d / gcd;//求最小公倍数进行通分 //通分前先判断相减或者相减 if(s'+') { fenzi = a*(gbs / b) + c (gbs / d); }else { fenzi = a(gbs / b) - c*(gbs / d); } //对结果进行判断 if(fenzi == 0) { printf("0\n"); continue; } if(fenzi == gbs) { printf("1\n"); continue; } gcd = GCD(fenzi,gbs); fenzi /= gcd; gbs /= gcd; if(fenzi%gbs==0) { printf("%d\n",fenzi / gbs); continue; } printf("%d/%d\n",fenzi,gbs); } return 0; }

                • 1

                信息

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