第七章 数学 4 AcWing 1578. 有理数运算

小鱼儿 2024-03-31 10:20 190阅读 0赞

第七章 数学 4 AcWing 1578. 有理数运算

原题链接

AcWing 1578. 有理数运算

算法标签

数学 模拟

思路

依题意模拟

代码

  1. #pragma GCC optimize(2)
  2. #pragma GCC optimize(3)
  3. #include<bits/stdc++.h>
  4. #define int long long
  5. #define x first
  6. #define y second
  7. #define ump unordered_map
  8. #define ums unordered_set
  9. #define pq priority_queue
  10. #define rep(i, a, b) for(int i=a;i<b;++i)
  11. #define Rep(i, a, b) for(int i=a;i>=b;--i)
  12. using namespace std;
  13. typedef pair<int, int> PII;
  14. const int N=10005, INF=0x3f3f3f3f3f3f3f3f;
  15. const double Exp=1e-8;
  16. //int t, n, m, cnt, ans;
  17. int a, b, c, d;
  18. inline int rd(){
  19. int s=0,w=1;
  20. char ch=getchar();
  21. while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
  22. while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
  23. return s*w;
  24. }
  25. void put(int x) {
  26. if(x<0) putchar('-'),x=-x;
  27. if(x>=10) put(x/10);
  28. putchar(x%10^48);
  29. }
  30. void print(int a, int b) {
  31. int t=__gcd(a, b);
  32. a/=t, b/=t;
  33. if(b<0){
  34. a*=-1, b*=-1;
  35. }
  36. if(a<0){
  37. printf("(");
  38. if(abs(a)>=b){
  39. if(b==1){
  40. printf("%lld", a);
  41. }else{
  42. printf("%lld", a/b);
  43. if(abs(a)%b){
  44. printf(" %lld/%lld", abs(a-a/b*b), b);
  45. }
  46. }
  47. }else{
  48. printf("%lld/%lld", a, b);
  49. }
  50. printf(")");
  51. }else{
  52. if(abs(a)>=b){
  53. if(b==1){
  54. printf("%lld", a);
  55. }else{
  56. printf("%lld", a/b);
  57. if(abs(a)%b){
  58. printf(" %lld/%lld", a-a/b*b, b);
  59. }else{
  60. printf("%lld/%lld", a, b);
  61. }
  62. }
  63. }else{
  64. if(a){
  65. printf("%lld/%lld", a, b);
  66. }else{
  67. printf("0");
  68. }
  69. }
  70. }
  71. }
  72. void add(int a, int b, int c, int d) {
  73. print(a, b), printf(" + "), print(c, d);
  74. a=a*d+c*b;
  75. b*=d;
  76. printf(" = "), print(a, b);
  77. puts("");
  78. }
  79. void sub(int a, int b, int c, int d) {
  80. print(a, b), printf(" - "), print(c, d);
  81. a=a*d-c*b;
  82. b*=d;
  83. printf(" = "), print(a, b);
  84. puts("");
  85. }
  86. void mul(int a, int b, int c, int d) {
  87. print(a, b), printf(" * "), print(c, d);
  88. a*=c;
  89. b*=d;
  90. printf(" = "), print(a, b);
  91. puts("");
  92. }
  93. void div(int a, int b, int c, int d) {
  94. print(a, b), printf(" / "), print(c, d);
  95. a*=d;
  96. b*=c;
  97. printf(" = ");
  98. if(!b||!d){
  99. printf("Inf");
  100. }else{
  101. print(a, b);
  102. }
  103. puts("");
  104. }
  105. signed main(){
  106. ios::sync_with_stdio(false);
  107. cin.tie(0);
  108. cout.tie(0);
  109. scanf("%lld/%lld%lld/%lld", &a, &b, &c, &d);
  110. add(a, b, c, d);
  111. sub(a, b, c, d);
  112. mul(a, b, c, d);
  113. div(a, b, c, d);
  114. return 0;
  115. }

参考文献

AcWing 1578. 有理数运算(PAT甲级辅导课)y总视频讲解

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,190人围观)

还没有评论,来说两句吧...

相关阅读

    相关 数学

    说明:本文翻译自《TangoRefMan\_Sep\_1\_2008》 由于本人是编程初学者,对很多程序设计概念不是非常熟悉,编程经验不多,再加上英语水平不高,翻译纯属一个D