たいちっち

競技プログラミングをしています

【Java】数字の各桁の値を取り出す

AtCoderの「B - Some Sums 」

atcoder.jp

 

提出した回答。

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a = sc.nextInt();
int b = sc.nextInt();

int count = 0;
for (int i = 0; i <= n; i++) {
int sum = 0;
int num_1 = (i / 1) % 10; // 1の位
int num_10 = (i / 10) % 10; // 10の位
int num_100 = (i / 100) % 10; // 100の位
int num_1000 = (i / 1000) % 10; // 1000の位
int num_10000 = (i / 10000) % 10; // 10000の位
sum = num_1 + num_10 + num_100 + num_1000 + num_10000;
if (a <= sum & sum <= b) {
count += i;
}
}
System.out.println(count);
sc.close();
}
}

 

数字の各桁は、

(数字 ÷ 取り出したい桁に相当する10の○乗)を10で割った余り

で取り出せる。

 

例えば「1234」なら、

・千の位は (1234 ÷ 1000) = 1.234 の整数部分1を10で割った余りで「1」 

・百の位は (1234 ÷ 100)   = 12.34 の整数部分12を10で割った余りで「2」

・十の位は (1234 ÷ 10)     = 123.4 の整数部分123を10で割った余りで「3」

・一の位は (1234 ÷ 1)       = 1234 の整数部分1234を10で割った余りで「4」

となる。

取り出したい桁が一の位となるように調整して、それより上の桁を捨てているイメージ。

 

今回は渡される値(N)に上限があったから上記で間に合った。

もし渡される値(N)上限がないなら、桁数を数えてそれに合わせて各桁の数値を取り出すことになると思う。

 

※「取り出したい桁に相当する10の○乗」部分はどのように表現したら良かったのだろう・・・。

 

おわり。。