例えば、 4 3 2 1 を与えて、4 / (3 - (2 + 1)) を計算すると
0 で割ることになりますが、その場合どうすればよいのでしょうか?
0 で割る時エラーにせず、結果を 0 にしたとすれば次のようになりますが
これでよいのでしょうか?
C
1#include <stdio.h>
2
3int a[4];
4char o[3];
5
6void func(int n, int v)
7{
8 if (n == 0)
9 printf("%d %c (%d %c (%d %c %d)) = %d\n",
10 a[0], o[0], a[1], o[1], a[2], o[2], a[3], v);
11 else {
12 n--;
13 o[n] = '+'; func(n, a[n] + v);
14 o[n] = '-'; func(n, a[n] - v);
15 o[n] = '*'; func(n, a[n] * v);
16 o[n] = '/'; func(n, v ? a[n] / v : 0);
17 }
18}
19
20int main(void)
21{
22 if (scanf("%d%d%d%d", a, a+1, a+2, a+3) == 4) func(3, a[3]);
23}
計算を double で行うようにすると、0 で割った場合 inf や nan になります。
C
1#include <stdio.h>
2
3double a[4];
4char o[3];
5
6void func(int n, double v)
7{
8 if (n == 0)
9 printf("%g %c (%g %c (%g %c %g)) = %.15g\n",
10 a[0], o[0], a[1], o[1], a[2], o[2], a[3], v);
11 else {
12 n--;
13 o[n] = '+'; func(n, a[n] + v);
14 o[n] = '-'; func(n, a[n] - v);
15 o[n] = '*'; func(n, a[n] * v);
16 o[n] = '/'; func(n, a[n] / v);
17 }
18}
19
20int main(void)
21{
22 if (scanf("%lf%lf%lf%lf", a, a+1, a+2, a+3) == 4) func(3, a[3]);
23}
追記
なぜ、質問者は何も応答しないのでしょうか?
0 で割った時は error と表示するようにしてみました。
C
1#include <stdio.h>
2
3int err = 0, a[4]; char o[3];
4
5void func(int n, int v)
6{
7 if (n == 0) {
8 printf("%d %c (%d %c (%d %c %d)) = ",
9 a[0], o[0], a[1], o[1], a[2], o[2], a[3]);
10 if (err) puts("error"); else printf("%d\n", v);
11 err = 0;
12 }
13 else {
14 n--;
15 o[n] = '+'; func(n, a[n] + v);
16 o[n] = '-'; func(n, a[n] - v);
17 o[n] = '*'; func(n, a[n] * v);
18 o[n] = '/'; func(n, v == 0 ? err = 1 : a[n] / v);
19 }
20}
21
22int main(void)
23{
24 if (scanf("%d%d%d%d", a, a+1, a+2, a+3) == 4) func(3, a[3]);
25}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/10 16:52