精华内容
下载资源
问答
  • 分数加减法

    2019-09-24 14:22:33
    分数加减法 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 编写一个C程序,实现两个分数的加减法 输入输入包含多行数据 每行数据是一个字符串,格式是"a/boc/d"。 其中a, b, c, d是一个0-9...

    分数加减法

    时间限制: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

                    刚开始提交有错误,(1/1=1,8/2=4/1) 将其改为(1/1=1,8/2=4) 才AC掉   

    #include<stdio.h>
    int gcd(int a,int b)
    {
    	if(a%b!=0)
    		gcd(b,a%b);
    	else
    		return(b);
    }
    int main()
    {
    	int a,b,c,d,x,y,z,t;
    	char o;
    	while(scanf("%d/%d%c%d/%d",&a,&b,&o,&c,&d)!=EOF)
    	{
    		if(o=='+')
    		{
    			x=gcd(b,d);
    			y=d/x*a+b/x*c;
    			z=b*d/x;
    			if(y==0)
    				printf("0\n");
    			else if(y==z)
    				printf("1\n");
    			else
    			{
    				t=gcd(y,z);
    				if(z/t==1)
    					printf("%d\n",y/t);
    				else
    					printf("%d/%d\n",y/t,z/t);
    			}
    
    		}
    		else if(o=='-')
    		{
    			x=gcd(b,d);
    			y=d/x*a-b/x*c;
    			z=b*d/x;
    			if(y==0)
    				printf("0\n");
    			else if(y<0)
    			{
    				y=-y;
    				if(y==z)
    					printf("-1\n");
    				else
    				{
    				t=gcd(y,z);
    				if(z/t==1)
    					printf("-%d\n",y/t);
    				else
    					printf("-%d/%d\n",y/t,z/t);
    				}
    			}
    			else
    			{
    				if(y==z)
    					printf("1\n");
    				else
    				{
    			    t=gcd(y,z);
    				if(z/t==1)
    					printf("%d\n",y/t);
    				else
    					printf("%d/%d\n",y/t,z/t);
    		
    				}
    			}
    
    		}
    	}
    	return 0;
    }


     

                

    转载于:https://www.cnblogs.com/NYNU-ACM/p/4237340.html

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 535
精华内容 214
关键字:

分数加减法