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

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

ただいまの
回答率

91.46%

  • Java

    10268questions

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

それぞれの桁の合計をだすプログラム

解決済

回答 6

投稿 2017/03/18 11:26

  • 評価
  • クリップ 0
  • VIEW 443

TomofumiKimura

score 15

sumOfDigitsでマイナスのinteger の桁の合計 も出したいのですが。
例えば、−257 を入力した場合 ー14と出るようにしたいのですが。マイナスの数字の扱いができません。どうしたらいいのでしょうか?

import java.util.Scanner;
/**
   RecursiveApp.java that contains the following two functions.
   @author Tomofumi Kimura

 */
public class RecursiveApp{

    public static void main(String [] args){
        System.out.println(-257);

    }



    public static long sumOfDigits(long n){
    int sum=0;
    if (n<10){
        sum += n;


    }else{
        sum += n%10;
        sum += sumOfDigits(n/10);

    }
    return sum;


    }






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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

+4

負数なら一旦プラスにしてフラグを立ててから桁を合計し、フラグを見てマイナスをつければいいのでは

正直この程度の処理で再帰を使うのは好きではないので…

public static long sumOfDigits(long n){
    // nが負数か
    boolean negate = n < 0;
    int sum = 0;
    // 負数ならマイナスをかけてプラスに変換
    if (negate) {
        n = -n;
    }
    // 桁合計
    while (n > 0) {
        sum = n % 10;
        n /= 10;
    }
    // 最初が負数だったならマイナスをつけて返す、そうでないならそのまま
    return negate ? -sum : sum;
}

投稿 2017/03/18 11:30

編集 2017/03/18 11:46

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+3

java でなく、 ruby でかいてみていますが、 java でも同じ考え方で書きなおせると思います。

def sum_of_digits(n)
  (n <=> 0) * sum_of_digits_pos(n.abs)
end

def sum_of_digits_pos(n)
  return n if (n / 10).zero?
  (n % 10) + sum_of_digits(n / 10)
end

puts sum_of_digits(257)
puts sum_of_digits(-257)

実行結果

$ ruby a.rb
14
-14

n <= 0 は ruby の独特の記述ですが、   n と 0 を比較して、
n < 0 なら -1, n == 0 なら 0, n > 0 なら 1 を返します。

投稿 2017/03/18 22:31

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

これって、-257と入力された場合は-2-5-7を計算するでいいんですよね?

swordoneさんの解答と大差ないですが、考え方としては

  1. nが負数だった場合はフラグを立てる。
  2. nの絶対値を求める。
  3. 求めた絶対値に対して、既存の処理を行う。
  4. フラグが立っていれば、最後に-1を掛ける。

になるかと。これならばプラスでもマイナスでも求まります。

投稿 2017/03/18 11:39

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

if (n<10){

if (Math.abs(n) < 10) {

こうするだけでいいのでは?

投稿 2017/03/21 11:33

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/21 15:00

    これは盲点だった

    キャンセル

0

Long.MIN_VALUEを考慮する必要がありますがMath.absが使えますー。

Math.abs
long値の絶対値を返します。引数が負でない場合は引数そのものを返します。負のときは、その正負を逆にした値を返します。

投稿 2017/03/18 11:57

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/18 12:05

    これだけではなんの解決にもなってないのでは?

    キャンセル

  • 2017/03/18 12:17 編集

    質問者がswordoneさんとベストアンサーをつけ間違えたのでは・・

    キャンセル

  • 2017/03/18 12:25

    まあ、質問者が何に詰まっていたかにもよりますからね。

    キャンセル

-2

public static long sumOfDigits(long n){
    long sum=0;
    if (n <0){
        n = Math.abs(n);
        if (n<10){
        sum += n;

        }else{
        sum += n%10;
        sum += sumOfDigits(n/10);

        }
        return sum = -sum;

    }
    if (n >0){
        if (n<10){
        sum += n;


    }else{
        sum += n%10;
        sum += sumOfDigits(n/10);

    }

    }
    return sum;
    }

投稿 2017/03/18 13:51

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/18 15:11

    びっくりするほど無駄だらけ

    キャンセル

  • 2017/03/18 15:40

    本当にそうですね、他に方法が見つからなかったので。これで行きました。

    キャンセル

  • 2017/03/21 07:09

    教えて貰った方法で解決したなら回答者にベストアンサーをつけてください。

    キャンセル

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

ただいまの回答率

91.46%

関連した質問

  • 受付中

    ループ化の方法

    public class Gohkaku {     public static void main(String[] args){         int math = ne

  • 解決済

    最大公約数と最小公倍数の求め方に関して

    以下のサイトの問題をjavaを用いてプログラミングしてみたのですが、 サンプルInputを入力したところ、答えは会っているのですが、 OutPutでWrong Answerとさ

  • 解決済

    100になる直前の加算結果出力

    javaで開始値と終了値を入力してその間の偶数を加算していき、合計が100を超えたら「数値が100を超えたため、処理を中止します。」とメッセージを出し、かつ合計が100になる前の加

  • 解決済

    合計、平均の出しかた

    class Art{ public static void main(String[] args){ //argを初期化 String a

  • 受付中

    ArrayListの中の重複した値の個数

    ArrayList内に aaa, bbb, ccc, ddd, aaa, bbb, ccc. aaa, bbb, aaa と、値が入っているとします

  • 解決済

    Javaメソッド

    引数で指定した数だけ草を生やして文字列として返す関数 kusa を作成する 以下のコードをもっと素直に書く方法としてはどんなものがあるのか知りたいです よろしくお願いします

  • 解決済

    親サーブレットのロジックで子サーブレットのサーブレット名を取得

    【背景】 親サーブレットから遷移先に指定されているJSPで 呼び出し元(親サーブレットを継承し製造したサーブレット、以下子サーブレット)のサーブレット名を取得し、表示したいです

  • 解決済

    Java初心者・ 配列について

    質問 4 5    //行の数と列の数 2 5 2 43 34 34 4 43 24 19 4 9 -3 4 4 12 43 34 -35 43 上記のような表が入力されたとし

同じタグがついた質問を見る

  • Java

    10268questions

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