本题要求编写程序,计算 2 个有理数的和、差、积、商。

输入格式:

输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。

输出格式:

分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf。题目保证正确的输出中没有超过整型范围的整数。

输入样例 1:

2/3 -4/2

结尾无空行

输出样例 1:

2/3 + (-2) = (-1 1/3)
2/3 - (-2) = 2 2/3
2/3 * (-2) = (-1 1/3)
2/3 / (-2) = (-1/3)

结尾无空行

输入样例 2:

5/3 0/6

结尾无空行

输出样例 2:

1 2/3 + 0 = 1 2/3
1 2/3 - 0 = 1 2/3
1 2/3 * 0 = 0
1 2/3 / 0 = Inf

结尾无空行

#include<stdio.h>
#include<math.h>
#pragma warning (disable:4996)
long long  gcd(long long  a, long long  b);
void fun(long long  a, long long  b);
int main() {long long a1, b1, a2, b2;scanf("%lld/%lld %lld/%lld", &a1, &b1, &a2, &b2);fun(a1, b1); printf(" + "); fun(a2, b2); printf(" = "); fun(a1 * b2 + a2 * b1, b1 * b2); putchar('\n');fun(a1, b1); printf(" - "); fun(a2, b2); printf(" = "); fun(a1 * b2 - a2 * b1, b1 * b2); putchar('\n');fun(a1, b1); printf(" * "); fun(a2, b2); printf(" = "); fun(a1*a2, b1 * b2); putchar('\n');fun(a1, b1); printf(" / "); fun(a2, b2); printf(" = "); fun(a1 * b2, a2 * b1);return 0;}
long long  gcd(long long a, long long b) {return b == 0 ? a : gcd(b, a % b);
}
void fun(long long a, long long b) {if (a * b == 0) {printf("%s", a == 0 ? "0" : "Inf");return;}int   flag = a > 0 && b < 0 || a < 0 && b>0;printf("%s", flag ? "(-" : "");a = abs(a); b = abs(b);int k = a / b;if (k != 0) {printf("%d", k);}if (a % b == 0) {printf("%s", flag ? ")" : "");return;}printf("%s", k != 0 ? " " : "");long long  yueshu = gcd(a, b);a /= yueshu; b /= yueshu;printf("%lld/%lld%s",a%b,b, flag ? ")" : "");return;
}

这题目很神奇,我用c编译过不了题目中的测试点3,4,但是我改用成c++编译器,结果就通过了

这题的思路,其实就是分解,不过我最开始分解错了,我把它分解成了加减乘除四个,然后特别恶心,其实这道题因为就是两个数以内的加减乘除,所以其实可以直接把它们做成约分就行,然后一个个进行处理,还有注意下首末的括号,还有个重要的思路就是把负数换成正数,不然趋0取余可以把你逼疯

#include<iostream>
#include<string>
using namespace std;
#include<cmath>
#include<algorithm>
#pragma warning (disable:4996)
long long gcd(long long  a, long long b);
void fun(long long a, long long b);
int main() {long long  a1, b1, a2, b2;scanf("%lld/%lld %lld/%lld", &a1, &b1, &a2, &b2);fun(a1, b1); printf(" + "); fun(a2, b2); printf(" = "); fun(a1 * b2 + a2 * b1, b1 * b2); cout << "\n";fun(a1, b1); printf(" - "); fun(a2, b2); printf(" = "); fun(a1 * b2 - a2 * b1, b1 * b2); cout << "\n";fun(a1, b1); printf(" * "); fun(a2, b2); printf(" = "); fun(a1 * a2, b1 * b2); cout << "\n";fun(a1, b1); printf(" / "); fun(a2, b2); printf(" = "); fun(a1 * b2, a2 * b1); cout << "\n";
}
long long gcd(long long  a, long long b) {if (b == 0)return a;else gcd(b, a % b);
}
void fun(long long  a, long long  b) {if (a * b == 0) {cout << (a == 0 ? "0" : "Inf");return;}bool flag = a > 0 && b < 0 || a < 0 && b>0;if (flag) {cout << "(-";a = abs(a);b = abs(b);}long long  zhengshu = a / b;if (zhengshu != 0) {cout << zhengshu;}if (a % b == 0) {cout << (flag == 1 ? ")" : "");return;}else{cout << (zhengshu != 0 ? " " : "");long long  yueshu = gcd(a, b);a /= yueshu; b /= yueshu;a %= b;printf("%lld/%lld", a, b);cout << (flag == 1 ? ")" : "");}return;}

第二次写这道题.发现如果显示答案错误可以从输入入手,我第二次写这道题发现如果scanf;是%d的输入的话,答案会显示错误,应该是被截断的原因

第三次写,秒杀

#include<iostream>
using namespace std;
#include<string>
#include<algorithm>
#pragma warning (disable:4996)
#include <climits>
#include <vector>
#include<stack>
long long  f(long long  a, long long b);
void fun1(long long a, long long b);
int main() {long long a1, b1, a2, b2;scanf("%lld/%lld %lld/%lld", &a1, &b1, &a2, &b2);fun1(a1, b1); printf(" + "); fun1(a2, b2); printf(" = "); fun1(a1 * b2 + a2 * b1, b1 * b2); putchar('\n');fun1(a1, b1); printf(" - "); fun1(a2, b2); printf(" = "); fun1(a1 * b2 - a2 * b1, b1 * b2); putchar('\n');fun1(a1, b1); printf(" * "); fun1(a2, b2); printf(" = "); fun1(a1 * a2, b1 * b2); putchar('\n');fun1(a1, b1); printf(" / "); fun1(a2, b2); printf(" = "); fun1(a1 * b2, a2 * b1); putchar('\n');
}
void fun1(long long  a, long long b) {if (a * b == 0) {printf("%s", a == 0 ? "0" : "Inf");return;}bool flag = a > 0 && b < 0 || a < 0 && b>0;if (flag) {cout << "(-";a = abs(a);b = abs(b);}long long zhengshu = a / b;if (zhengshu != 0)cout << zhengshu;if (zhengshu != 0 && a % b != 0)cout << " ";if (a % b != 0) {long long gongyuehsu = f(a, b);a /= gongyuehsu;b /= gongyuehsu;cout << a % b << "/" << b;}if (flag)cout << ")";return;}
long long  f(long long  a,long long  b) {return b == 0 ? a : f(b, a % b);
}

哦,忽然记起来我写这道题的时候有个编译错误卡了我挺久的下面贴一下

严重性    代码    说明    项目    文件    行    禁止显示状态
错误    LNK2019    无法解析的外部符号 "__int64 __cdecl f(int,int)" (?f@@YA_JHH@Z),函数 "void __cdecl fun1(__int64,__int64)" (?fun1@@YAX_J0@Z) 中引用了该符号    Project33    C:\Users\18960\source\repos\Project33\源.obj    1

我用vs2019的时候出了这个错误,然后查了下发现是我函数声明的时候把f函数形参声明成了int 类型,当时我在另一个函数里的时候调用时使用的是long long类型,然后发现这种错误是你在调用函数的时候,你声明的函数和实际调用的函数形参列表不一样导致的

long long  f(int a, int  b);
long long  f(long long a,long long  b) {return b == 0 ? a : f(b, a % b);
}

就上面这种

1034 有理数四则运算 (20 分)(c语言)(测试点三)相关推荐

  1. 【2020模拟考试T4】【PAT乙】1034 有理数四则运算 (20分) 测试点2

    problem 1034 有理数四则运算 (20分) 本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中 ...

  2. C++学习之路 | PTA乙级—— 1034 有理数四则运算 (20 分)(精简)

    1034 有理数四则运算 (20 分) 本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是 ...

  3. 1034 有理数四则运算 (20分)

    本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前 ...

  4. 【PAT乙级】1034 有理数四则运算 (20 分)

    题目地址 #include<bits/stdc++.h> using namespace std; typedef long long int LL; LL gcd(LL a,LL b) ...

  5. PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)

    PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)  http://www.patest.cn/contests/pat-b-practise/1034 ...

  6. 1034. 有理数四则运算(20)

    本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只 ...

  7. 1034. 有理数四则运算(20)-PAT乙级真题

    本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只 ...

  8. PAT 乙级 1034. 有理数四则运算(20) Java版

    本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只 ...

  9. Pat乙级 1034 有理数四则运算

    Pat乙级 1034 有理数四则运算 思路 代码 题目网址 https://pintia.cn/problem-sets/994805260223102976/problems/99480528762 ...

最新文章

  1. PHP 10条有用的建议
  2. php扩展兼容,PHP扩展迁移为PHP7扩展兼容性问题记录,php7兼容性_PHP教程
  3. Attribute的一个列子
  4. window服务器cpu过高的排查_高频面试题:Java程序占用 CPU 过高怎么排查
  5. UNIX网络编程读书笔记:辅助数据
  6. 个人软件过程4 功能说明和用户体验设计
  7. python 快速删除程序_如何快速一次性卸载所有python包(第三方库)呢
  8. 开源贡献 计算_学生如何开始为开源软件做贡献
  9. CCF201809-2 买菜(100分)【序列处理+差分】
  10. c语言 空心的倒三角形,C语言题目,请根据要求打印可空心倒三角形
  11. 有效集法(Active Set),内点法(Interior-Point)及序列二次规划(SQP)法
  12. 《PMP学习笔记》1.3 五大过程组十大知识领域
  13. python控制电脑音量,声音之控制音量,,
  14. 阿里云0元注册域名 云服务有了免费入口
  15. Ambari-Agent心跳丢失:Failed to connect to https://xx.xx.xx:8440/ca due to
  16. 兜兜转转,华为与李一男终于在汽车行业重逢,两者将展开决战?
  17. 微软Windows商店会变得更像Steam ,Xbox可自由安装PC游戏
  18. mac 修改 DNS
  19. ANO匿名上位机V7协议STM32
  20. kafka维护工具使用指南

热门文章

  1. cserialport 循环发送信号_10个动作三个循环,练完至少瘦一圈,吃多了也不用担心...
  2. Java黑皮书课后题第5章:*5.23(演示抵消错误)当处理一个很大的数字或很小的数字时候,会产生一个抵消错误。……编写程序对上面的数列从左到右和从右向左计算的结果进行比较,n=50000
  3. Android显示广播写法,【Android】广播的写法
  4. 《大型网站技术架构》5、6、7章阅读笔记
  5. bootstrap_bootstrap中日历范围选择插件daterangepicker的使用
  6. SQLserver查看某个视图的创建语句
  7. 如何开展灰盒测试[1]:灰盒测试优缺点分析
  8. 转自JIM Wang:把 isv.config.xml 按钮事件移动到 entity.onload()
  9. 关于框架的胡言乱语(上)
  10. 牛客网(剑指offer) 第十一题 二进制中1的个数