pat 34 乙级 有理数四则运算最后两个测试点 不仅longlong坑你一把 也可能是abs绝对值

本文主要是介绍pat 34 乙级 有理数四则运算最后两个测试点 不仅longlong坑你一把 也可能是abs绝对值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include<stdio.h>
#include<math.h>long long int gcd(long long a, long long b)  //求最大公约数
{if (a%b == 0) return b;else return gcd(b, a%b);
}
void huajian(long long *a, long long *b)
{long long t = abs(gcd(*a, *b));*a = *a / t;*b = *b / t;
}
void relation(long long int div, long long int Div)
{long long  int k, kk;if (Div == 0) printf("Inf");                                     //除数等于0else if (div == 0)printf("%lld", div);                           //被除数等于0else if (div > 0)                                               //被除数大于0{huajian(&div, &Div);if (div < Div)                                                              //真分数{                                                    printf("%lld/%lld", div, Div);                                          //输出}else {                                                                     //假分数k = div / Div;                                                              //整数部分kk = div%Div;if (kk== 0)                                                            //整除printf("%lld", k);else                                                                         //非整除{                                                                    //分子                                               //化简printf("%lld %lld/%lld", k, kk, Div);}}}else                                                      //被除数小于0{huajian(&div, &Div);if ((-1*div) < Div)                                                         //真分数{printf("(%lld/%lld)", div, Div);}else                                                                        //假分数{k = div / Div;                                                         //整数部分kk = (-1*div)%Div;if (kk == 0) printf("(%lld)", k);                                           //整除                       else{printf("(%lld %lld/%lld)", k, kk, Div);}}}
}
void add_min_mul_div(long long int a, long long int b, char sign, long long  int c, long long int d)
{relation(a, b);printf(" %c ", sign);relation(c, d);long long int a1, a2;switch (sign){case '+':     a1 = a*d + b*c;    a2 = b*d;       break;case '-':     a1 = a*d - b*c;    a2 = b*d;       break;case '*':     a1 = a*c;          a2 = b*d;       break;case '/':      a1 = a*d;  a2 = b*c;  if (a2 < 0) { a1 = -a1; a2 = -a2; }break;     //保证分母大于0}printf(" = ");relation(a1, a2);
}
int main()
{char sign[] = { '+','-','*','/' };long long a, b, c, d;scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);for (int i = 0; i < 4; i++){add_min_mul_div(a, b, sign[i], c, d);  printf("\n");}//while (1);return 0;
}

1.最后两个测试点花了大概五个小时。刚开始按照网上 的都改成longlong了 一直不过。最后 发现我之前代码乘-1部分用的绝对值。abs().abs参数是int型的  唉。。欲哭无泪

这篇关于pat 34 乙级 有理数四则运算最后两个测试点 不仅longlong坑你一把 也可能是abs绝对值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/731891

相关文章

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

BUUCTF(34)特殊的 BASE64

使用pycharm时,如果想把代码撤销到之前的状态可以用 Ctrl+z 如果不小心撤销多了,可以用 Ctrl+Shift+Z 还原, 别傻傻的重新敲了 BUUCTF在线评测 (buuoj.cn) 查看字符串,想到base64的变表 这里用的c++的标准程序库中的string,头文件是#include<string> 这是base64的加密函数 std::string

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

找出php中可能有问题的代码行

前言 当你发现一个平时占用cpu比较少的进程突然间占用cpu接近100%时,你如何找到导致cpu飙升的原因?我的思路是,首先找到进程正在执行的代码行,从而确定可能有问题的代码段。然后,再仔细分析有问题的代码段,从而找出原因。 如果你的程序使用的是c、c++编写,那么你可以很容易的找到正在执行的代码行。但是,程序是php编写的,如何找到可能有问题的代码行呢?这个问题就是本文要解决的问题。 背景