zoukankan      html  css  js  c++  java
  • A1081 Rational Sum (20分)

    一、技术总结

    1. 这题是关于分数四则运算的题目,主要的关键点在于化简函数的编写,以及输出显示函数的编写;
    2. 化简函数的注意点一个是当分子为0的时候,记得将分母赋值为1,如果分子不为0,那么就使用gcd函数进行化简;在一个就是当分母出现负数的时候,为了输出方便要将分子分母的符号转化;
    3. 关于输出显示函数,一般是根据题目的具体要求进行编写,但是不外乎,一个数假分数的显示,还有就是如果是整数单独输出分子即可,也就是分母为1,如果是真分式,那么就简单输出即可;

    二、参考代码

    #include<iostream>
    #include<vector>
    using namespace std;
    struct Fraction{
    	int num, denom;
    }; 
    int gcd(int a, int b){
    	return !b ? a : gcd(b, a % b);
    }
    Fraction reduction(Fraction a){
    	if(a.denom < 0){
    		a.num = -a.num;
    		a.denom = -a.denom;
    	}
    	if(a.num == 0){
    		a.denom = 1;
    	}else{
    		int d = gcd(abs(a.num), abs(a.denom));
    		a.num /= d;
    		a.denom /= d;
    	}
    	return a;
    }
    Fraction add(Fraction f1, Fraction f2){
    	Fraction c;
    	c.num = f1.num * f2.denom + f1.denom * f2.num;
    	c.denom = f1.denom * f2.denom;
    	return c; 
    }
    void showResult(Fraction r){
    	Fraction c = reduction(r);
    	if(c.denom == 1){
    		printf("%d", c.num);
    	}else{
    		if(c.num > c.denom){
    			printf("%d %d/%d", c.num / c.denom, abs(c.num) % c.denom, c.denom);
    		}else{
    			printf("%d/%d", c.num, c.denom);
    		}		
    	}
    }
    int main(){
    	int n;
    	cin >> n;
    	Fraction sum, first;
    	scanf("%d/%d", &sum.num, &sum.denom);
    	for(int i = 1; i < n; i++){
    		Fraction ans;
    		scanf("%d/%d", &ans.num, &ans.denom);
    		sum = add(sum, ans);
    	}
    	showResult(sum);
    	return 0;
    }
    
  • 相关阅读:
    SpringCloud组件---Ribbon
    SpringCloud组件---Eureka
    tomcat及Jetty远程调试debug
    mysql 删除重复数据
    mysql执行SQL语句时报错:[Err] 3
    线程池原理剖析
    上限下限
    线程池Executors、Callable与Future的应用
    spring获取bean(自定义工具类)
    java.util.concurrent.Exchanger应用范例
  • 原文地址:https://www.cnblogs.com/tsruixi/p/13215930.html
Copyright © 2011-2022 走看看