回答編集履歴
6
コマンド名が何でもよいコードを追加
answer
CHANGED
@@ -35,8 +35,18 @@
|
|
35
35
|
{
|
36
36
|
return c ? **v - '0' > 9u ? printf("%d\n", main(c-1, v+1)) :
|
37
37
|
**v - '0' + main(c-1, v+1) : 0;
|
38
|
-
|
39
38
|
}
|
40
39
|
```
|
41
40
|
**追記3**
|
42
|
-
9 があると正しい結果が出ないバグを修正しました。
|
41
|
+
9 があると正しい結果が出ないバグを修正しました。
|
42
|
+
|
43
|
+
**追記4**
|
44
|
+
コマンド名が数字で始まっていてもいいようにすると、
|
45
|
+
```c
|
46
|
+
#include <stdio.h>
|
47
|
+
|
48
|
+
int main(int c, char **v)
|
49
|
+
{
|
50
|
+
return c ? printf("%d\n", main(0, v+1)) : *v ? **v - '0' + main(0, v+1) : 0;
|
51
|
+
}
|
52
|
+
```
|
5
バグ修正
answer
CHANGED
@@ -33,7 +33,10 @@
|
|
33
33
|
|
34
34
|
int main(int c, char **v)
|
35
35
|
{
|
36
|
-
return c ? **v - '0'
|
36
|
+
return c ? **v - '0' > 9u ? printf("%d\n", main(c-1, v+1)) :
|
37
|
-
|
37
|
+
**v - '0' + main(c-1, v+1) : 0;
|
38
|
+
|
38
39
|
}
|
39
|
-
```
|
40
|
+
```
|
41
|
+
**追記3**
|
42
|
+
9 があると正しい結果が出ないバグを修正しました。
|
4
+= や ++ を使わないコードを追加
answer
CHANGED
@@ -13,4 +13,27 @@
|
|
13
13
|
|
14
14
|
**追記**
|
15
15
|
条件に 1桁の整数とあるので atoi は不要でした。
|
16
|
-
`atoi(*++v)` を `**++v - '0'` に変更してください。
|
16
|
+
`atoi(*++v)` を `**++v - '0'` に変更してください。
|
17
|
+
|
18
|
+
**追記2**
|
19
|
+
./ex 1 2 3 だと、c=4, v[0]="./ex", v[1]="1", v[2]="2", v[3]="3", v[4]=NULL
|
20
|
+
--c, ++v で main が再帰的に呼び出されると、次のようになります。
|
21
|
+
c=3, v[0]="1", v[1]="2", v[2]="3", v[3]=NULL
|
22
|
+
c=2, v[0]="2", v[1]="3", v[2]=NULL
|
23
|
+
c=1, v[0]="3", v[1]=NULL
|
24
|
+
c=0, v[0]=NULL
|
25
|
+
|
26
|
+
++ も使ってはいけないのですか?
|
27
|
+
質問に追記してください
|
28
|
+
システムコールとは何ですか?
|
29
|
+
Unix(Linux) なら open, close, read, write などをシステムコールと言います。
|
30
|
+
|
31
|
+
```c
|
32
|
+
#include <stdio.h>
|
33
|
+
|
34
|
+
int main(int c, char **v)
|
35
|
+
{
|
36
|
+
return c ? **v - '0' < 9u ? **v - '0' + main(c-1, v+1) :
|
37
|
+
printf("%d\n", main(c-1, v+1)) : 0;
|
38
|
+
}
|
39
|
+
```
|
3
誤字修正
answer
CHANGED
@@ -12,5 +12,5 @@
|
|
12
12
|
+= を使わない方法もありますが、知りたいですか?
|
13
13
|
|
14
14
|
**追記**
|
15
|
-
条件に 1桁の整数とあるので atoi は不要で
|
15
|
+
条件に 1桁の整数とあるので atoi は不要でした。
|
16
16
|
`atoi(*++v)` を `**++v - '0'` に変更してください。
|
2
atoi を使わない
answer
CHANGED
@@ -9,4 +9,8 @@
|
|
9
9
|
--c ? s += atoi(*++v), main(c, v) : printf("%d\n", s);
|
10
10
|
}
|
11
11
|
```
|
12
|
-
+= を使わない方法もありますが、知りたいですか?
|
12
|
+
+= を使わない方法もありますが、知りたいですか?
|
13
|
+
|
14
|
+
**追記**
|
15
|
+
条件に 1桁の整数とあるので atoi は不要ですした。
|
16
|
+
`atoi(*++v)` を `**++v - '0'` に変更してください。
|
1
*v[] -> **v
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
#include <stdio.h> // printf
|
4
4
|
#include <stdlib.h> // atoi
|
5
5
|
|
6
|
-
int main(int c, char *v
|
6
|
+
int main(int c, char **v)
|
7
7
|
{
|
8
8
|
static int s;
|
9
9
|
--c ? s += atoi(*++v), main(c, v) : printf("%d\n", s);
|