首页 > 其他分享 >L1-009 N个数求和

L1-009 N个数求和

时间:2024-11-08 10:18:01浏览次数:5  
标签:frac numer ll 个数 deno Fraction L1 009 分母

目录

一、问题描述

二、问题分析 

三、源码解答

四、参考资料


一、问题描述

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

1. 输入格式

输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

2. 输出格式

输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

3. 输入样例

5
2/5 4/15 1/30 -2/60 8/3

4. 输出样例

3 1/3

5. 限制条件

代码长度限制        16 KB

时间限制                400 ms

内存限制                64 MB

栈限制                    8192 KB


二、问题分析 

1. 数据结构定义:使用Fraction类面向对象定义分数结构(分子和分母)。

2. 重载运算符:operator+、operator>>、operator<<分别用于分数相加、输入分数、输出分数。

3. 分数化简:使用内置的__gcd()函数寻找分子和分母的最大公约数,然后进行化简,最后按照题目的格式要求进行输出即可。

三、源码解答

#include <bits/stdc++.h>
#define ll long long
using namespace std;
class Fraction {
private:
    ll numer; //分子
    ll deno;  //分母
public:
    Fraction() {}
    Fraction(ll n, ll d): numer(n), deno(d) {}
    Fraction operator+(const Fraction& frac) {
        ll n = numer * frac.deno + deno * frac.numer;
        ll d = deno * frac.deno;
        ll g = __gcd(d, n);
        return Fraction(n/g, d / g);
    }
    friend istream& operator>>(istream& in, Fraction& frac) {
        char op;
        in >> frac.numer >> op >> frac.deno;
        return in;
    }
    friend ostream& operator<<(ostream& out, Fraction& frac) {
        if(frac.numer == 0) cout << 0;
        else if(frac.deno == 1) cout << frac.numer;
        else {
            int intpart = frac.numer / frac.deno;
            frac.numer %= frac.deno;
            if(intpart) cout << intpart << " ";
            if(frac.numer * frac.deno < 0) {
                if(frac.numer > 0) {
                    frac.numer = -frac.numer;
                    frac.deno = -frac.deno;
                }
            }
            out << frac.numer << "/" << frac.deno;
        }
        return out;
    }
};
int main() {
    int n; cin >> n;
    Fraction res(0, 1), frac;
    while(n--) {
        cin >> frac;
        res  = res + frac;
    }
    cout << res;
    return 0;
}

四、参考资料

PTA | 程序设计类实验辅助教学平台

标签:frac,numer,ll,个数,deno,Fraction,L1,009,分母
From: https://blog.csdn.net/weixin_65214650/article/details/143601158

相关文章

  • L1-005 考试座位号
    目录一、问题描述二、问题分析 三、源码解答四、参考资料一、问题描述        每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试......
  • 洛谷P3870[TJOI20009]-开关
    时间复杂度越高的算法能模拟的结构就越多...题目大意:给定一串长度为n,元素只能为0或1的序列,默认该序列元素全为0.接下来需要进行m次操作,操作分为两种:1.把区间\([a,b]\)中的所有元素值取反.2.求区间\([a,b]\)中元素值为1的元素数量.每一次调用操作1时,每次一行输出一个......
  • cpp_9_8.9【(修改函数)计算一个数的p次幂】
    #include<stdio.h>doublepower(doublen,intp);//ANSI函数原型intmain(void){doublex,xpow;intexp;printf("Enteranumberandthepositiveintegerpower");printf("towhich\nthenumberwillberaised.Enterq......
  • 用C语言代码输出三个数
    题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?已知:1、三位数2、1-43、各不相同输出:1、有多少个这样的三位数2、依次输出#include<stdio.h>intmain(){for(intb=1;b<5;b++)  {   for(ints=1;s<5;s++)    ......
  • laravel:optimize和clear(laravel11)
    一,optimize创建的文件在哪里?执行optimize:$phpartisanoptimizeINFOCachingframeworkbootstrap,configuration,andmetadata.config................................................................57.67msDONEevents.................................
  • 数据结构 ——— 计算链式二叉树第k层的节点个数
    目录链式二叉树示意图手搓一个链式二叉树计算链式二叉树第k层的节点个数 链式二叉树示意图手搓一个链式二叉树代码演示://数据类型typedefintBTDataType;//二叉树节点的结构typedefstructBinaryTreeNode{BTDataTypedata;//每个节点的数据s......
  • 0基础学Python——类的单例模式、反射函数、记录类的创建个数、迭代器、生成器及生成
    0基础学Python——类的单例模式、反射函数、记录类的创建个数、迭代器、生成器及生成器练习类的单例模式定义代码演示反射函数代码演示记录类的创建个数迭代器定义特点生成器定义特点写法生成器练习生成器生成1-无穷的数字生成器生成无穷个素数类的单例模式定义......
  • c语言中声明数组时, 元素个数必须使用常量表达式
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c##测试程序#include<stdio.h>intmain(void){intvar1=5;//初始化一个变量var1intarray1[var1]={3,5,8,4,9};//初始化数组return0;}[......
  • 如何使用YOLOv5来训练——建筑工地安全图像数据集,并附上详细的训练代码和步骤。这个数
    如何使用YOLOv5来训练——建筑工地安全图像数据集,并附上详细的训练代码和步骤。这个数据集包含10个类别,标注为YOLO格式。安全帽面罩安全锥等数据集进行检测建筑工地安全行为图像数据集yolo格式0:“安全帽”,1:“面罩”,2:“无安全帽”、3:“无面罩”、4:“无安全背心”、5:“......
  • 如何使用深度学习框架(PyTorch)来训练——147913张图像的超大超详细垃圾分类数据集,并附
    超大超详细垃圾分类数据集(分类,分类),共4大类,345小类,147913张图,已全部分类标注完成,共12GB。厨余垃圾76小类35058张可回收物195类86116张其他垃圾53类16156张有害垃圾18小类10583张 如何使用深度学习框架(如PyTorch)来训练一个包含147913张图像的超大超详细垃圾分类......