回答編集履歴

3

ちょっと削除

2020/08/19 13:35

投稿

PingHermit
PingHermit

スコア478

test CHANGED
@@ -99,5 +99,3 @@
99
99
  ```
100
100
 
101
101
  https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10230218750?__ysp=c3RyMnZhbHVl
102
-
103
- 最初知恵袋で聞いたんだから知恵袋で聞けよ。

2

マイナス追加

2020/08/19 13:34

投稿

PingHermit
PingHermit

スコア478

test CHANGED
@@ -23,3 +23,81 @@
23
23
  それまでの数値までだけ変換するのであれば
24
24
 
25
25
  return 0; でなく break; にすればいいかな?
26
+
27
+
28
+
29
+
30
+
31
+ 追加
32
+
33
+ n2q37_cppさんのソースに付加するのも気が引けるので
34
+
35
+ 自分が書いたソースに付加しておきます
36
+
37
+ ```
38
+
39
+ #include <stdio.h>
40
+
41
+ #include <ctype.h>
42
+
43
+ #include <limits.h>
44
+
45
+ int str2value(const char *p)
46
+
47
+ {
48
+
49
+ char minus = 0;
50
+
51
+ unsigned ret = 0;
52
+
53
+ switch (*p) {
54
+
55
+ case '-':
56
+
57
+ minus = 1;
58
+
59
+ case '+':
60
+
61
+ p++;
62
+
63
+ }
64
+
65
+ unsigned limits = minus ? 0U - INT_MIN : INT_MAX;
66
+
67
+ while (isdigit(*p)) {
68
+
69
+ int no = *p++ - '0';
70
+
71
+ if ((limits - no) / 10 < ret)
72
+
73
+ break;
74
+
75
+ ret = ret * 10 + no;
76
+
77
+ }
78
+
79
+ return minus ? -ret : ret;
80
+
81
+ }
82
+
83
+
84
+
85
+ int main()
86
+
87
+ {
88
+
89
+ char str[16];
90
+
91
+ while (fgets(str, sizeof str, stdin))
92
+
93
+ printf("%d\n", str2value(str));
94
+
95
+ return 0;
96
+
97
+ }
98
+
99
+ ```
100
+
101
+ https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10230218750?__ysp=c3RyMnZhbHVl
102
+
103
+ 最初知恵袋で聞いたんだから知恵袋で聞けよ。

1

マイナス追加

2020/08/19 13:01

投稿

PingHermit
PingHermit

スコア478

test CHANGED
File without changes