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

回答編集履歴

2

訂正

2017/10/21 06:03

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,5 +1,14 @@
1
1
  `num / 10`と`num % 10`とを足し合わせればよいです。
2
2
 
3
+ **訂正:**
4
+ これだと例えば28が入力されたとき上手くいきませんね。
5
+ 下記の一般的な方法を使ってもよいですが、二桁ならば直接書いてもよいでしょう。
6
+ ```Java
7
+ for(int i = 0; i < 2; i++) {
8
+ num = (num / 10) + (num % 10);
9
+ }
10
+ ```
11
+
3
12
  追記
4
13
  ---
5
14
  あんまり回答が短いのもあれなので、一般的な方法を置いときます。

1

追記

2017/10/21 06:03

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,1 +1,34 @@
1
- `num / 10`と`num % 10`とを足し合わせればよいです。
1
+ `num / 10`と`num % 10`とを足し合わせればよいです。
2
+
3
+ 追記
4
+ ---
5
+ あんまり回答が短いのもあれなので、一般的な方法を置いときます。
6
+
7
+ **ループを使う方法**
8
+ ```Java
9
+ private static int reduceSum(int arg) {
10
+ while(arg / 10 != 0) {
11
+ int total = 0;
12
+ for(; arg != 0; arg /= 10) {
13
+ total += arg % 10;
14
+ }
15
+ arg = total;
16
+ }
17
+ return arg;
18
+ }
19
+ ```
20
+
21
+ **再帰を使う方法**
22
+ ```Java
23
+ private static int reduceSumRecursive(int arg) {
24
+ if(arg / 10 == 0) return arg;
25
+
26
+ int total = 0;
27
+ for(; arg != 0; arg /= 10) {
28
+ total += arg % 10;
29
+ }
30
+ return reduceSumRecursive(total);
31
+ }
32
+ ```
33
+
34
+ Javaは末尾再帰最適化されませんが、呼び出し回数がたかが知れていますので大丈夫かと。