teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

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

2020/10/06 14:56

投稿

mjk
mjk

スコア303

answer CHANGED
@@ -8,11 +8,15 @@
8
8
  int main() {
9
9
  unsigned n, i = 0, ans = 0;
10
10
  scanf("%d", &n);
11
+ if (n == 0) {
12
+ printf("0");
13
+ } else {
11
- while (ans * 2 < n) {
14
+ while (ans * 2 <= n) {
12
- ans = pow(2, i);
15
+ ans = pow(2, i);
13
- i++;
16
+ i++;
17
+ }
18
+ printf("%d\n", ans);
14
19
  }
15
- printf("%d\n", ans);
16
20
  }
17
21
  ```
18
22
  ```
@@ -21,9 +25,21 @@
21
25
  1073741824
22
26
 
23
27
  入出力例(サンプル)
28
+ 128
29
+ 128
30
+
31
+ 入出力例(サンプル)
24
32
  100
25
33
  64
26
34
 
35
+ 入出力例(サンプル)
36
+ 2
37
+ 2
38
+
39
+ 入出力例(サンプル)
40
+ 1
41
+ 1
42
+
27
43
  入出力例(入力範囲最小値)
28
44
  0
29
45
  0

6

回答変更

2020/10/06 14:56

投稿

mjk
mjk

スコア303

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

5

回答削除

2020/10/06 14:44

投稿

mjk
mjk

スコア303

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

4

誤記訂正

2020/10/06 14:24

投稿

mjk
mjk

スコア303

answer CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  int main() {
12
12
  unsigned n;
13
- if (scanf("%d", &n));
13
+ scanf("%d", &n);
14
14
  unsigned x = sqrt(n);
15
15
  unsigned ans = x * x;
16
16
  printf("%d\n",ans);

3

誤記訂正

2020/10/06 14:15

投稿

mjk
mjk

スコア303

answer CHANGED
@@ -19,7 +19,7 @@
19
19
  ```
20
20
  入出力例
21
21
  100
22
- 10
22
+ 100
23
23
 
24
24
  99
25
25
  81

2

コード追記

2020/10/06 14:12

投稿

mjk
mjk

スコア303

answer CHANGED
@@ -2,4 +2,25 @@
2
2
  例えば√nを小数点以下切り捨てて整数にしたものを2乗すれば答えが求められると思います。(未検証)
3
3
  範囲が非負整数2^32とのことなので型はunsignedで十分でしょう。
4
4
  `unsigned x = sqrt(n);`
5
- `unsigned ans = x * x;`
5
+ `unsigned ans = x * x;`
6
+
7
+ ```C
8
+ #include <stdio.h>
9
+ #include <math.h>
10
+
11
+ int main() {
12
+ unsigned n;
13
+ if (scanf("%d", &n));
14
+ unsigned x = sqrt(n);
15
+ unsigned ans = x * x;
16
+ printf("%d\n",ans);
17
+ }
18
+ ```
19
+ ```
20
+ 入出力例
21
+ 100
22
+ 10
23
+
24
+ 99
25
+ 81
26
+ ```

1

誤字訂正,型指定追記

2020/10/06 14:11

投稿

mjk
mjk

スコア303

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