回答編集履歴

7

n=0の場合の処理を修正

2020/10/06 14:56

投稿

mjk
mjk

スコア303

test CHANGED
@@ -18,15 +18,23 @@
18
18
 
19
19
  scanf("%d", &n);
20
20
 
21
- while (ans * 2 < n) {
21
+ if (n == 0) {
22
22
 
23
- ans = pow(2, i);
23
+ printf("0");
24
24
 
25
+ } else {
26
+
27
+ while (ans * 2 <= n) {
28
+
29
+ ans = pow(2, i);
30
+
25
- i++;
31
+ i++;
32
+
33
+ }
34
+
35
+ printf("%d\n", ans);
26
36
 
27
37
  }
28
-
29
- printf("%d\n", ans);
30
38
 
31
39
  }
32
40
 
@@ -44,9 +52,33 @@
44
52
 
45
53
  入出力例(サンプル)
46
54
 
55
+ 128
56
+
57
+ 128
58
+
59
+
60
+
61
+ 入出力例(サンプル)
62
+
47
63
  100
48
64
 
49
65
  64
66
+
67
+
68
+
69
+ 入出力例(サンプル)
70
+
71
+ 2
72
+
73
+ 2
74
+
75
+
76
+
77
+ 入出力例(サンプル)
78
+
79
+ 1
80
+
81
+ 1
50
82
 
51
83
 
52
84
 

6

回答変更

2020/10/06 14:56

投稿

mjk
mjk

スコア303

test CHANGED
@@ -1 +1,59 @@
1
- すみません問題を勘違いしていましたので削除しておき
1
+ すみません問題を勘違いしていましたので最初の回答は削除しました
2
+
3
+
4
+
5
+ すでに色々な方から回答されているように色々な解法があると思いますが一例として参考までに動くコードを提示しておきます。
6
+
7
+ ```C
8
+
9
+ #include <math.h>
10
+
11
+ #include <stdio.h>
12
+
13
+
14
+
15
+ int main() {
16
+
17
+ unsigned n, i = 0, ans = 0;
18
+
19
+ scanf("%d", &n);
20
+
21
+ while (ans * 2 < n) {
22
+
23
+ ans = pow(2, i);
24
+
25
+ i++;
26
+
27
+ }
28
+
29
+ printf("%d\n", ans);
30
+
31
+ }
32
+
33
+ ```
34
+
35
+ ```
36
+
37
+ 入出力例(入力範囲最大値)
38
+
39
+ 2147483647
40
+
41
+ 1073741824
42
+
43
+
44
+
45
+ 入出力例(サンプル)
46
+
47
+ 100
48
+
49
+ 64
50
+
51
+
52
+
53
+ 入出力例(入力範囲最小値)
54
+
55
+ 0
56
+
57
+ 0
58
+
59
+ ```

5

回答削除

2020/10/06 14:44

投稿

mjk
mjk

スコア303

test CHANGED
@@ -1,51 +1 @@
1
- 色々な解法があると思いますが・・・
2
-
3
- 例えば√nを小数点以下切り捨てて整数にしたものを2乗すれば答えが求められると思います。(未検証)
4
-
5
- 範囲が非負整数2^32とのことなので型はunsignedで十分でしょう。
6
-
7
- `unsigned x = sqrt(n);`
8
-
9
- `unsigned ans = x * x;`
10
-
11
-
12
-
13
- ```C
14
-
15
- #include <stdio.h>
16
-
17
- #include <math.h>
18
-
19
-
20
-
21
- int main() {
22
-
23
- unsigned n;
24
-
25
- scanf("%d", &n);
26
-
27
- unsigned x = sqrt(n);
28
-
29
- unsigned ans = x * x;
30
-
31
- printf("%d\n",ans);
1
+ すみません問題を勘違いしていましたので削除しておきます。
32
-
33
- }
34
-
35
- ```
36
-
37
- ```
38
-
39
- 入出力例
40
-
41
- 100
42
-
43
- 100
44
-
45
-
46
-
47
- 99
48
-
49
- 81
50
-
51
- ```

4

誤記訂正

2020/10/06 14:24

投稿

mjk
mjk

スコア303

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  unsigned n;
24
24
 
25
- if (scanf("%d", &n));
25
+ scanf("%d", &n);
26
26
 
27
27
  unsigned x = sqrt(n);
28
28
 

3

誤記訂正

2020/10/06 14:15

投稿

mjk
mjk

スコア303

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  100
42
42
 
43
- 10
43
+ 100
44
44
 
45
45
 
46
46
 

2

コード追記

2020/10/06 14:12

投稿

mjk
mjk

スコア303

test CHANGED
@@ -7,3 +7,45 @@
7
7
  `unsigned x = sqrt(n);`
8
8
 
9
9
  `unsigned ans = x * x;`
10
+
11
+
12
+
13
+ ```C
14
+
15
+ #include <stdio.h>
16
+
17
+ #include <math.h>
18
+
19
+
20
+
21
+ int main() {
22
+
23
+ unsigned n;
24
+
25
+ if (scanf("%d", &n));
26
+
27
+ unsigned x = sqrt(n);
28
+
29
+ unsigned ans = x * x;
30
+
31
+ printf("%d\n",ans);
32
+
33
+ }
34
+
35
+ ```
36
+
37
+ ```
38
+
39
+ 入出力例
40
+
41
+ 100
42
+
43
+ 10
44
+
45
+
46
+
47
+ 99
48
+
49
+ 81
50
+
51
+ ```

1

誤字訂正,型指定追記

2020/10/06 14:11

投稿

mjk
mjk

スコア303

test CHANGED
@@ -1,7 +1,9 @@
1
1
  色々な解法があると思いますが・・・
2
2
 
3
- 例えば√nを小数点以下切り捨てて整数にしたものを2乗すれば答えが求められと思います。(未検証)
3
+ 例えば√nを小数点以下切り捨てて整数にしたものを2乗すれば答えが求められと思います。(未検証)
4
4
 
5
- `x = sqrt(n);`
5
+ 範囲が非負整数2^32とのことなので型はunsignedで十分でしょう。
6
6
 
7
+ `unsigned x = sqrt(n);`
8
+
7
- `ans = x * x;`
9
+ `unsigned ans = x * x;`