回答編集履歴

4

追記

2017/09/01 07:28

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -56,9 +56,11 @@
56
56
 
57
57
  しかし、自動的に一桁一桁分解してくれるわけではありません。
58
58
 
59
- どうしてもvectorを使いたいなら、こんなような関数が必要かと。
59
+ どうしてもvectorを使いたいなら、こんなな関数が必要かと。
60
60
 
61
61
  ```C++
62
+
63
+ // 整数を一桁一桁vectorにpush
62
64
 
63
65
  void pushEachDigit(std::vector<int> &dst, int num) {
64
66
 
@@ -79,3 +81,61 @@
79
81
  ```
80
82
 
81
83
 
84
+
85
+ ```C++
86
+
87
+ inline bool isOdd(int num) {
88
+
89
+ return num % 2 == 1;
90
+
91
+ }
92
+
93
+
94
+
95
+ // vectorに格納された『奇数』の個数を返す
96
+
97
+ int countOddDigit(const std::vector<int> &vec) {
98
+
99
+ int numOfOdd = 0;
100
+
101
+ for(auto elem: vec) {
102
+
103
+ if(isOdd(elem)) {
104
+
105
+ numOfOdd++;
106
+
107
+ }
108
+
109
+ }
110
+
111
+ return numOfOdd;
112
+
113
+ }
114
+
115
+ ```
116
+
117
+
118
+
119
+ そうすると、質問者様の書きたいコードはこんな構造になりますね。
120
+
121
+ ```C++
122
+
123
+ int tsuika::argk(std::vector<int>& vec) {
124
+
125
+ int value = 0;
126
+
127
+ std::cin >> value;
128
+
129
+
130
+
131
+ puchEachDigit(vec, value);
132
+
133
+ int numOfOdd = countOddDigit(vec);
134
+
135
+
136
+
137
+ return numOfOdd;
138
+
139
+ }
140
+
141
+ ```

3

追記

2017/09/01 07:28

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -32,17 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- ---
36
-
37
- vectorクラスは確か配列のように複数の値を保管きます
35
+ もうちょっと柔軟すると、次のような感じなるしょう
38
-
39
- しかし、自動的に一桁一桁分解してくれるわけではありません。
40
-
41
-
42
-
43
- ---
44
-
45
- こうすれば何桁でも対応でき、しかも非破壊的ですね。
46
36
 
47
37
  ```C++
48
38
 
@@ -57,3 +47,35 @@
57
47
  }
58
48
 
59
49
  ```
50
+
51
+
52
+
53
+ ---
54
+
55
+ vectorクラスは確かに配列のように複数の値を保管できます。
56
+
57
+ しかし、自動的に一桁一桁分解してくれるわけではありません。
58
+
59
+ どうしてもvectorを使いたいなら、こんなような関数が必要かと。
60
+
61
+ ```C++
62
+
63
+ void pushEachDigit(std::vector<int> &dst, int num) {
64
+
65
+ dst.clear();
66
+
67
+ dst.shrink_to_fit();
68
+
69
+
70
+
71
+ for(; num != 0; num /= 10) {
72
+
73
+ dst.push_back(num % 10);
74
+
75
+ }
76
+
77
+ }
78
+
79
+ ```
80
+
81
+

2

追記

2017/09/01 06:36

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -37,3 +37,23 @@
37
37
  vectorクラスは確かに配列のように複数の値を保管できます。
38
38
 
39
39
  しかし、自動的に一桁一桁分解してくれるわけではありません。
40
+
41
+
42
+
43
+ ---
44
+
45
+ こうすれば何桁でも対応でき、しかも非破壊的ですね。
46
+
47
+ ```C++
48
+
49
+ for(int val = value; val != 0; val /= 10) {
50
+
51
+ if(val % 2 == 1) {
52
+
53
+ numOfOdd++;
54
+
55
+ }
56
+
57
+ }
58
+
59
+ ```

1

コード修正

2017/09/01 06:24

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -24,6 +24,10 @@
24
24
 
25
25
  }
26
26
 
27
+
28
+
29
+ std::cout << numOfOdd << std::endl;
30
+
27
31
  ```
28
32
 
29
33