fork download
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int input(int zero)
  6. {
  7. int i;
  8.  
  9. while (1) {
  10. scanf("%d", &i);
  11. if (i == 0 && zero) {
  12. continue;
  13. }
  14. if (i < -32768 || 32767 < i) {
  15. continue;
  16. }
  17. break;
  18. }
  19. return i;
  20. }
  21.  
  22. int main()
  23. {
  24. int bi1, bo1, op, bi2, bo2;
  25. int bi, bo;
  26. int g1, g2, g3;
  27.  
  28. printf("1番目分数の分子=\n");
  29. bi1 = input(0);
  30. printf("1番目分数の分母=\n");
  31. bo1 = input(1);
  32.  
  33. printf("演算子(1:足し算 2:引き算 3:掛け算 4:割り算)=\n");
  34. do {
  35. scanf("%d", &op);
  36. } while (op < 1 || 4 < op);
  37.  
  38. printf("2番目分数の分子=\n");
  39. bi2 = input(op == 4);
  40. printf("2番目分数の分母=\n");
  41. bo2 = input(1);
  42.  
  43. switch (op) {
  44. case 1: // 足し算
  45. bi = bi1 * bo2 + bi2 * bo1;
  46. bo = bo1 * bo2;
  47. break;
  48. case 2: // 引き算
  49. bi = bi1 * bo2 - bi2 * bo1;
  50. bo = bo1 * bo2;
  51. break;
  52. case 3: // 掛け算
  53. bi = bi1 * bi2;
  54. bo = bo1 * bo2;
  55. break;
  56. case 4: // 割り算
  57. bi = bi1 * bo2;
  58. bo = bo1 * bi2;
  59. break;
  60. }
  61.  
  62. // 約分 ユークリッドの互除法
  63. g1 = bi;
  64. g2 = bo;
  65. while (g3 = g1 % g2) {
  66. g1 = g2;
  67. g2 = g3;
  68. }
  69. bi /= g2;
  70. bo /= g2;
  71.  
  72. if (bo == 1) {
  73. printf("%d\n", bi);
  74. } else if (bi == 0) {
  75. printf("%d\n", bi);
  76. } else {
  77. printf("%c%d/%d\n", (bi * bo < 0) ? '-' : ' ', abs(bi), abs(bo));
  78. }
  79. return 0;
  80. }
  81.  
Success #stdin #stdout 0.01s 2684KB
stdin
-3
10
3
-6
5
stdout
1番目分数の分子=
1番目分数の分母=
演算子(1:足し算 2:引き算 3:掛け算 4:割り算)=
2番目分数の分子=
2番目分数の分母=
 9/25