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

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

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

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

Q&A

解決済

5回答

2311閲覧

Javaにおける桁の操作に関して

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2018/05/03 02:20

前提・実現したいこと

AtCoder ABC083B - Some Sumsの問題を解いています。
問題文
1 以上 N 以下の整数のうち、10 進法での各桁の和が A 以上 B 以下であるものの総和を求めてください。

制約
1≤N≤104
1≤A≤B≤36
入力はすべて整数である

AtCoder ABC083B - Some Sums

発生している問題・エラーメッセージ

入力例1と2は現在のコードで問題ないのですが、
入力例3を現在のコードで実行した場合

100 4 16 4654

のようになり、100の時各桁の和として1にならなければならないところ、
10となっているのが原因だと考えられます。
どのように修正すればいいかわからず、アドバイスをいただけますと幸いです。

該当のソースコード

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int N = scan.nextInt(); int A = scan.nextInt(); int B = scan.nextInt(); int sum = 0; for (int i = 0; i <= N; i++) { int check = i / 10 + i % 10; if (A <= check && check <= B) { sum += i; } } System.out.println(sum); } }

補足情報(FW/ツールのバージョンなど)

Eclipse Version: Oxygen.3a Release (4.7.3a)

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

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

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

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

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

guest

回答5

0

Java

1while(n > 0){ 2 sum += n % 10; 3 n /= 10; 4}

このような形で書くと最終的に、変数sumが桁総和になります。

また、問題の方を見たところ入力は半角区切りの1行のデータで与えられるので、split関数で
データを分けましょう。

Java

1import java.util.Scanner; 2 3public class Main { 4 public static void main(String[] args) { 5 6 Scanner sc = new Scanner(System.in); 7 String line = sc.nextLine(); 8 String []resultArray = line.split(" "); 9 10 int []data = new int[3]; 11 for(int i = 0; i < data.length; i++){ 12 data[i] = Integer.parseInt(resultArray[i]); 13 } 14 int sum = 0; 15 for(int i = 1; i <= data[0]; i++){ 16 if(data[1] <= digits_sum(i) && digits_sum(i) <= data[2]){ 17 sum += i; 18 } 19 } 20 System.out.println(sum); 21 } 22 public static int digits_sum(int n) 23 { 24 int sum = 0; 25 while(n > 0){ 26 sum += n % 10; 27 n /= 10; 28 } 29 30 return sum; 31 } 32}

投稿2018/05/03 04:46

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

i = 100 の時
check = i / 10 + i % 10
は 10 + 0 = 10
になります。 i が 3桁の場合に 各桁の合計が計算できていません。

java

1import java.util.Scanner; 2 3public class TestXX { 4 public static void main(String[] args) { 5 Scanner scan = new Scanner(System.in); 6 int N = scan.nextInt(); 7 int A = scan.nextInt(); 8 int B = scan.nextInt(); 9 10 int sum = 0; 11 for (int i = 1; i <= N; i++) { 12 int check = 0; 13 for (String c : String.valueOf(i).split("")) { 14 check += Integer.parseInt(c); 15 } 16 if (A <= check && check <= B) { 17 sum += i; 18 // System.out.println("" + i + ", " + check); 19 } 20 } 21 System.out.println(sum); 22 } 23}

for ループを Stream で記述するコード例を web 上でみつけることができます。
(google で "AtCoder ABC083B java" で検索)

投稿2018/05/03 03:59

katoy

総合スコア22324

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

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

0

int check = i/100 + (i / 10)%10 + i % 10;

投稿2018/05/03 02:25

y_waiwai

総合スコア87719

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

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

0

この方法で行くなら、桁総和を求めるためのループが必要です。
100/10で出てきた10に対して、もう一度同じことをしましょう。

投稿2018/05/03 02:26

swordone

総合スコア20649

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

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

0

int check = i / 10 + i % 10;

ここが、2桁の場合にしか対応していません。

投稿2018/05/03 02:24

pepperleaf

総合スコア6383

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問