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

回答編集履歴

4

追記

2017/09/01 07:28

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -27,8 +27,9 @@
27
27
  ---
28
28
  vectorクラスは確かに配列のように複数の値を保管できます。
29
29
  しかし、自動的に一桁一桁分解してくれるわけではありません。
30
- どうしてもvectorを使いたいなら、こんなような関数が必要かと。
30
+ どうしてもvectorを使いたいなら、こんなな関数が必要かと。
31
31
  ```C++
32
+ // 整数を一桁一桁vectorにpush
32
33
  void pushEachDigit(std::vector<int> &dst, int num) {
33
34
  dst.clear();
34
35
  dst.shrink_to_fit();
@@ -38,3 +39,33 @@
38
39
  }
39
40
  }
40
41
  ```
42
+
43
+ ```C++
44
+ inline bool isOdd(int num) {
45
+ return num % 2 == 1;
46
+ }
47
+
48
+ // vectorに格納された『奇数』の個数を返す
49
+ int countOddDigit(const std::vector<int> &vec) {
50
+ int numOfOdd = 0;
51
+ for(auto elem: vec) {
52
+ if(isOdd(elem)) {
53
+ numOfOdd++;
54
+ }
55
+ }
56
+ return numOfOdd;
57
+ }
58
+ ```
59
+
60
+ そうすると、質問者様の書きたいコードはこんな構造になりますね。
61
+ ```C++
62
+ int tsuika::argk(std::vector<int>& vec) {
63
+ int value = 0;
64
+ std::cin >> value;
65
+
66
+ puchEachDigit(vec, value);
67
+ int numOfOdd = countOddDigit(vec);
68
+
69
+ return numOfOdd;
70
+ }
71
+ ```

3

追記

2017/09/01 07:28

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -15,16 +15,26 @@
15
15
  std::cout << numOfOdd << std::endl;
16
16
  ```
17
17
 
18
- ---
19
- vectorクラスは確か配列のように複数の値を保管きます
18
+ もうちょっと柔軟すると、次のような感じなるしょう
20
- しかし、自動的に一桁一桁分解してくれるわけではありません。
21
-
22
- ---
23
- こうすれば何桁でも対応でき、しかも非破壊的ですね。
24
19
  ```C++
25
20
  for(int val = value; val != 0; val /= 10) {
26
21
  if(val % 2 == 1) {
27
22
  numOfOdd++;
28
23
  }
29
24
  }
30
- ```
25
+ ```
26
+
27
+ ---
28
+ vectorクラスは確かに配列のように複数の値を保管できます。
29
+ しかし、自動的に一桁一桁分解してくれるわけではありません。
30
+ どうしてもvectorを使いたいなら、こんなような関数が必要かと。
31
+ ```C++
32
+ void pushEachDigit(std::vector<int> &dst, int num) {
33
+ dst.clear();
34
+ dst.shrink_to_fit();
35
+
36
+ for(; num != 0; num /= 10) {
37
+ dst.push_back(num % 10);
38
+ }
39
+ }
40
+ ```

2

追記

2017/09/01 06:36

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -17,4 +17,14 @@
17
17
 
18
18
  ---
19
19
  vectorクラスは確かに配列のように複数の値を保管できます。
20
- しかし、自動的に一桁一桁分解してくれるわけではありません。
20
+ しかし、自動的に一桁一桁分解してくれるわけではありません。
21
+
22
+ ---
23
+ こうすれば何桁でも対応でき、しかも非破壊的ですね。
24
+ ```C++
25
+ for(int val = value; val != 0; val /= 10) {
26
+ if(val % 2 == 1) {
27
+ numOfOdd++;
28
+ }
29
+ }
30
+ ```

1

コード修正

2017/09/01 06:24

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -11,6 +11,8 @@
11
11
 
12
12
  value /= 10;
13
13
  }
14
+
15
+ std::cout << numOfOdd << std::endl;
14
16
  ```
15
17
 
16
18
  ---