例えば
int = 10;
ならば1
int = 18;
ならば9のように
二桁の数字を一桁の数字にするには
プログラミングでどのように表現するべき
なのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
num / 10
とnum % 10
とを足し合わせればよいです。
訂正:
これだと例えば28が入力されたとき上手くいきませんね。
下記の一般的な方法を使ってもよいですが、二桁ならば直接書いてもよいでしょう。
Java
1for(int i = 0; i < 2; i++) { 2 num = (num / 10) + (num % 10); 3}
追記
あんまり回答が短いのもあれなので、一般的な方法を置いときます。
ループを使う方法
Java
1private static int reduceSum(int arg) { 2 while(arg / 10 != 0) { 3 int total = 0; 4 for(; arg != 0; arg /= 10) { 5 total += arg % 10; 6 } 7 arg = total; 8 } 9 return arg; 10}
再帰を使う方法
Java
1private static int reduceSumRecursive(int arg) { 2 if(arg / 10 == 0) return arg; 3 4 int total = 0; 5 for(; arg != 0; arg /= 10) { 6 total += arg % 10; 7 } 8 return reduceSumRecursive(total); 9}
Javaは末尾再帰最適化されませんが、呼び出し回数がたかが知れていますので大丈夫かと。
投稿2017/10/21 05:27
編集2017/10/21 06:03総合スコア35660
0
解決済みだし今更って感じもしますが、入力した数字が何桁でも行けるよう汎用的なものを作ってみました。
(i)入力した文字列から求める。
java
1public class Main { 2 public static void main(String[] args) { 3 4 Scanner sc = new Scanner(System.in); 5 String line = sc.nextLine(); 6 String []resultArray = line.split(""); 7 int []data = new int[line.length()]; 8 int sum = 0; 9 for(int i = 0; i < line.length(); i++){ 10 data[i] = Integer.parseInt(resultArray[i]); 11 sum += data[i]; 12 } 13 14 System.out.println(sum); 15 16 } 17}
(ii)入力した文字列を変数に変換して求める。
java
1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) { 5 6 Scanner sc = new Scanner(System.in); 7 int n = sc.nextInt(); 8 int sum = 0; 9 while(n > 0){ 10 sum += n % 10; 11 n /= 10; 12 } 13 System.out.println(sum); 14 } 15}
投稿2018/06/01 02:12
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/06/01 02:19
退会済みユーザー
2018/06/01 02:19
退会済みユーザー
2018/06/01 02:20
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/21 05:30
2017/10/21 08:42