プログラミングにおいては割り算時における「商と余り」の概念はとても大切になってくる。特に余りに関しては日常生活でほとんど意識することがないにも関わらず、プログラミングに時にはあらゆる局面で多用される。是非ここで商と余りの利用方法を学んでいこう
基本
まずは商と余りの基本だ。
今2000円持っている。りんご(130円)を買えるだけ買った場合の個数と余ったお金を求めよ
[実行例]
15個買えて50円残りました。
public class Main{
public static void main(String[] args){
System.out.println(2000/130 + "個買えて" + 2000%130 +"円余りました");
}
}
こういった場合には/の演算子と%余りの演算子を使う。
Javaでint/intの場合、小数点以下が落ちるので結果として商を求めることができる。
例題
1mのヒモがある、18cmずつに切り分けた場合、何本とれて何cm余るか?
[実行例]
5本とれて10cm余ります
偶数判定
偶数か奇数かを判定する場合も%の演算子を使う。この場合ある数を[2で割った余りが0か]で求める
ユーザーから数値を受け取りそれが偶数か奇数かを判定せよ
[実行例1]
整数>>8 [enter]
8は偶数です。
[実行例2]
整数>>9 [enter]
9は奇数です。
public class Main{
public static void main(String[] args){
System.out.print("整数>>");
int n=new java.util.Scanner(System.in).nextInt();
if(n % 2 == 0){
System.out.println(n + "は偶数です");
}else{
System.out.println(n + "は奇数です");
}
}
}
このようにプログラミングで偶数か奇数かの判定が必要となった際には「2で割った余りが0か」どうかで判定する。一見「2で割ったときの余りが1」かどうかで奇数を判定しても同じように感じてしまうがこれはよくない。なぜなら負の値を扱った場合に正しく判定できないからだ(-3 % 2 -> -1 )
例題
1-20の範囲の偶数を表示せよ.
[実行例]
2 4 6 8 10
倍数
ある整数が3の倍数なのかどうかを判定する場合にも用いる。考え方は偶数判定のときと同じで「3で割ったときの余りが0」かどうかで判定する
整数の入力を受け取りそれが3の倍数なのかを判定する。
[実行例]
整数>>269
269は3の倍数ではありません
public class Main{
public static void main(String[] args){
System.out.print("整数>>");
int n=new java.util.Scanner(System.in).nextInt();
if(n % 3 == 0){
System.out.println(n + "は3の倍数です");
}else{
System.out.println(n + "は3の倍数ではありません");
}
}
}
例題
1-20までを順に出力していく。ただしもしその数が3で割り切れるときにはFizzと5で割り切れるときにはBuzzと3でも5でも割り切れるときにはFizzBuzzと出力すること。
[実行例]
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
循環
特定のルールで何かを循環させたい場合にも%の出番だ。
ユーザーから数字を受け取り、その数分だけ数字を出力する。
ただし、数字は012を循環させたものであること。
[実行例]
整数>>7
0
1
2
0
1
2
0
public class Main{
public static void main(String[] args){
System.out.print("整数>>");
int n=new java.util.Scanner(System.in).nextInt();
for(int i=0;i<n;i++){
System.out.println(i%3);
}
}
}
例題
52枚のトランプがスペードの1から順番にきれいに並んでいる。指定枚数目の数字を答えよ。
[実行例]
何枚目>>22
9です。
public class Main{
public static void main(String[] args){
System.out.print("整数>>");
int n=new java.util.Scanner(System.in).nextInt();
System.out.println((n-1) % 13 + 1);
}
}
先程のトランプの場合、スペードやダイヤといったスーツも今度は商をつかうと判定できる(スペード->ダイヤ->ハート->クラブ)と並んでいると仮定すると
public class Main{
public static void main(String[] args){
System.out.print("何枚目>>");
int n=new java.util.Scanner(System.in).nextInt();
int suitIdx=(n-1) / 13;
switch(suitIdx){
case 0:
System.out.println("スペード");
case 1:
System.out.println("ダイヤ");
case 2:
System.out.println("ハート");
case 3:
System.out.println("クラブ");
}
}
}
商と余りの演習問題
1
秒を入力するとそれが何時間何分何秒なのかを出力する処理。
[実行例]
何秒>>5462
5462秒は1時間31分2秒です
2
1から50までを出力していき、3がつく数字(3,13,23,30,31….)には末尾に!を付与する
[実行例]
1
2
3!
4
5
6
7
8
9
10
11
12
13!
…
30!
31!
32!
33!
..
50
3
点数を入力すると、その数の分だけ*を出力する。
なお、10個ごとに|を付与すること
[実行例1]
点数>>24
**********|**********|****
[実行例2]
点数>>10
**********|
4
数字を入力すると、末尾の数から順番に出力する処理
[実行例1]
数字>>3421
1
2
4
3
[実行例2]
数字>>34215
5
1
2
4
3
コメント