回答編集履歴
6
コマンド名が何でもよいコードを追加
test
CHANGED
@@ -72,8 +72,6 @@
|
|
72
72
|
|
73
73
|
**v - '0' + main(c-1, v+1) : 0;
|
74
74
|
|
75
|
-
|
76
|
-
|
77
75
|
}
|
78
76
|
|
79
77
|
```
|
@@ -81,3 +79,25 @@
|
|
81
79
|
**追記3**
|
82
80
|
|
83
81
|
9 があると正しい結果が出ないバグを修正しました。
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
**追記4**
|
86
|
+
|
87
|
+
コマンド名が数字で始まっていてもいいようにすると、
|
88
|
+
|
89
|
+
```c
|
90
|
+
|
91
|
+
#include <stdio.h>
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
int main(int c, char **v)
|
96
|
+
|
97
|
+
{
|
98
|
+
|
99
|
+
return c ? printf("%d\n", main(0, v+1)) : *v ? **v - '0' + main(0, v+1) : 0;
|
100
|
+
|
101
|
+
}
|
102
|
+
|
103
|
+
```
|
5
バグ修正
test
CHANGED
@@ -68,10 +68,16 @@
|
|
68
68
|
|
69
69
|
{
|
70
70
|
|
71
|
-
return c ? **v - '0'
|
71
|
+
return c ? **v - '0' > 9u ? printf("%d\n", main(c-1, v+1)) :
|
72
72
|
|
73
|
-
|
73
|
+
**v - '0' + main(c-1, v+1) : 0;
|
74
|
+
|
75
|
+
|
74
76
|
|
75
77
|
}
|
76
78
|
|
77
79
|
```
|
80
|
+
|
81
|
+
**追記3**
|
82
|
+
|
83
|
+
9 があると正しい結果が出ないバグを修正しました。
|
4
+= や ++ を使わないコードを追加
test
CHANGED
@@ -29,3 +29,49 @@
|
|
29
29
|
条件に 1桁の整数とあるので atoi は不要でした。
|
30
30
|
|
31
31
|
`atoi(*++v)` を `**++v - '0'` に変更してください。
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
**追記2**
|
36
|
+
|
37
|
+
./ex 1 2 3 だと、c=4, v[0]="./ex", v[1]="1", v[2]="2", v[3]="3", v[4]=NULL
|
38
|
+
|
39
|
+
--c, ++v で main が再帰的に呼び出されると、次のようになります。
|
40
|
+
|
41
|
+
c=3, v[0]="1", v[1]="2", v[2]="3", v[3]=NULL
|
42
|
+
|
43
|
+
c=2, v[0]="2", v[1]="3", v[2]=NULL
|
44
|
+
|
45
|
+
c=1, v[0]="3", v[1]=NULL
|
46
|
+
|
47
|
+
c=0, v[0]=NULL
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
++ も使ってはいけないのですか?
|
52
|
+
|
53
|
+
質問に追記してください
|
54
|
+
|
55
|
+
システムコールとは何ですか?
|
56
|
+
|
57
|
+
Unix(Linux) なら open, close, read, write などをシステムコールと言います。
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
```c
|
62
|
+
|
63
|
+
#include <stdio.h>
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
int main(int c, char **v)
|
68
|
+
|
69
|
+
{
|
70
|
+
|
71
|
+
return c ? **v - '0' < 9u ? **v - '0' + main(c-1, v+1) :
|
72
|
+
|
73
|
+
printf("%d\n", main(c-1, v+1)) : 0;
|
74
|
+
|
75
|
+
}
|
76
|
+
|
77
|
+
```
|
3
誤字修正
test
CHANGED
@@ -26,6 +26,6 @@
|
|
26
26
|
|
27
27
|
**追記**
|
28
28
|
|
29
|
-
条件に 1桁の整数とあるので atoi は不要で
|
29
|
+
条件に 1桁の整数とあるので atoi は不要でした。
|
30
30
|
|
31
31
|
`atoi(*++v)` を `**++v - '0'` に変更してください。
|
2
atoi を使わない
test
CHANGED
@@ -21,3 +21,11 @@
|
|
21
21
|
```
|
22
22
|
|
23
23
|
+= を使わない方法もありますが、知りたいですか?
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
**追記**
|
28
|
+
|
29
|
+
条件に 1桁の整数とあるので atoi は不要ですした。
|
30
|
+
|
31
|
+
`atoi(*++v)` を `**++v - '0'` に変更してください。
|
1
*v[] -> **v
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
int main(int c, char *v
|
11
|
+
int main(int c, char **v)
|
12
12
|
|
13
13
|
{
|
14
14
|
|