質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

2回答

4175閲覧

二桁の数字を一桁にする

sankakusan

総合スコア22

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2017/10/21 05:24

例えば

int = 10;

ならば1

int = 18;

ならば9のように

二桁の数字を一桁の数字にするには
プログラミングでどのように表現するべき
なのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

num / 10num % 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
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sankakusan

2017/10/21 05:30

早速の返答ありがとうございます。 勉強になりました。 本当にありがとうございました。
sankakusan

2017/10/21 08:42

補足ありがとうございます。 今回の場合一桁の整数の倍数のみでしたので 28のようなパターンは考えていませんでした。 本当に勉強になりました。 ありがとうございます。
guest

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2018/06/01 02:17

半年以上も経ってベストアンサーと同じコードを書く意図は?
退会済みユーザー

退会済みユーザー

2018/06/01 02:19

??どこが同じですか
退会済みユーザー

退会済みユーザー

2018/06/01 02:19

汎用的なコードを書いたつもりですが....
退会済みユーザー

退会済みユーザー

2018/06/01 02:20

ベストアンサーにsplit関数は使われておりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問