zoukankan      html  css  js  c++  java
  • 分数运算(gcd)

    时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)

    题目描述

    计算机中采用浮点数表示所有实数,但这意味着精度丢失。例如无法精确表示“1/3”。
    NowCoder最近要处理很多金融问题,这些账目不允许出现精度丢失,因为差之毫厘谬之千里。你能帮他实现一套分数的计算器吗?

    输入描述:

    输入包含多组数据。
    每组数据一行,包含两个分数和一个运算符,中间用空格隔开。
    其中分子与分母均为不大于30的正整数。


     

    输出描述:

    对应每一组数据,输出两个分数的计算结果。
    要求输出最简分数,即分子与分母互质。

    输入例子:

    1/3 2/3 +
    1/5 1/4 -
    1/2 1/3 *
    2/3 4/3 /

    输出例子:

    1/1
    -1/20
    1/6
    1/2

    题解:利用gcd函数来求解是否互质,但要考虑负数的情况

    代码:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    int main()
    {
    	int a,b,c,d;
    	char oper;
    	while(scanf("%d/%d %d/%d %c",&a,&b,&c,&d,&oper)!=EOF)
    	{
    		if(oper=='+')
    		{
    			int sum1=a*d+b*c;
    			int sum2=b*d;
    			while(__gcd(sum1,sum2)!=1)
    			{
    				int k=sum1;
    				sum1/=__gcd(sum1,sum2);
    				sum2/=__gcd(k,sum2);
    			}
    			printf("%d/%d
    ",sum1,sum2);
    		}
    		if(oper=='-')
    		{
    			int sum1=a*d-b*c;
    			int flag=0;
    			if(sum1<0)
    			{
    			sum1=-sum1;
    			flag=1;
    		    }
    			int sum2=b*d;
    			while(__gcd(sum1,sum2)!=1)
    			{
    				int k=sum1;
    				sum1/=__gcd(sum1,sum2);
    				sum2/=__gcd(k,sum2);
    			}
    			if(flag)
    			printf("-%d/%d
    ",sum1,sum2);
    		    else
    		    printf("%d/%d
    ",sum1,sum2);
    		    
    		}
    		if(oper=='*')
    		{
    			int sum1=a*c;
    		
    			int sum2=b*d;
    			while(__gcd(sum1,sum2)!=1)
    			{
    				int k=sum1;
    				sum1/=__gcd(sum1,sum2);
    				sum2/=__gcd(k,sum2);
    			}
    			printf("%d/%d
    ",sum1,sum2);
    		}
    		if(oper=='/')
    		{
    			int sum1=a*d;
    		
    			int sum2=b*c;
    			while(__gcd(sum1,sum2)!=1)
    			{
    				int k=sum1;
    				sum1/=__gcd(sum1,sum2);
    				sum2/=__gcd(k,sum2);
    			}
    			printf("%d/%d
    ",sum1,sum2);
    		}
    	}
    	return 0;
    }
  • 相关阅读:
    怎么在myeclipse中怎么集成Tomcat。
    JSP .基础概念
    继承
    封装
    什么是面向对象
    数据排序
    开发的套路
    Javabean规范
    转发和重定向
    md5加密
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10782052.html
Copyright © 2011-2022 走看看