求N个有理数的和

本文描述了一段C语言代码,该代码用于处理N个有理数的输入并以整数形式输出。作者面临的问题是在PTA系统中,第5个测试用例出现浮点错误,可能是由于除以零的情况。代码包括读取有理数,合并它们,寻找并消除公因数,以及处理可能的符号变化。尽管有收获,但作者尚未解决这个浮点错误问题。
摘要由CSDN通过智能技术生成

    在第一行输入N,第二行输入N个有理数,并且以分子/分母形式输出(如2/3 3/4),输出形式以整数 分子/分母形式输出。

我最终写出了如下代码:

#include<stdio.h>
int main(){
    int N,z,m,z1,m1;//z表示分子,m表示分母
    int num=1;//求输出的整数
    int same=1;//寻找公因数
    scanf ("%d",&N);
    scanf("%d/%d",&z1,&m1);
    for (int i=1;i<N;i++){
        scanf(" %d/%d",&z,&m);
        z1=z1*m+m1*z;//分子计算方式
        m1=m1*m;//分母计算方式
    }
    num=z1/m1;
    z1=z1-num*m1;
    if (m1<0){
        z1=-z1;
        m1=-m1;
    }//符号交换
    int j=1;
    for (j;j<=z1||j<=m1;j++){
        int f,g;
        f=z1%j;
        g=m1%j; 
        if (f==0 && g==0){
        same=j;
        }//寻找公因数
    }
        z1=z1/same;
        m1=m1/same;
    if (num==0&&z1!=0){
        printf("%d/%d",z1,m1);
    }
    if (num!=0&&z1!=0){
        printf("%d %d/%d",num,z1,m1);
    }
    if (z1==0){
        printf("%d",num);
    }//分类输出
}

实在想不明白到底哪里出了问题,在PTA系统中,本题一共有5个测试点,4个答案正确,但是第5个显示浮点错误,就是出现了除以0的情况,怎么改都不对。检查代码明明只有num=z1/m1、m1=m1/same和z1=z1/same三个除法运算,而且m1是输入的,same也是初始化为1,并且只能比1大的数。

虽然没有把这道题完全做对,但是总体上还是有收获的例如用了for循环进行读取数据;分析了负号在分母还是在分子的情况,输出形式中整数是否为0的情况和分子是否为0的情况,考虑的情况还算全面;学会了设新函数(虽然最后发现没有意义又被我删了),也知道了scanf的读取和输入的形式要匹配等等。

至于浮点错误,还是希望自己在3天之内解决吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PGa NH4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值