割り算と聞くと、答えが割り切れるかどうかだけが気になりますよね。でも、プログラミングでは「割り切れない部分=余り」が実は非常に重要です!
たとえば、偶数と奇数を分けたり、データを分割したり、カレンダーの曜日を計算する際にも、この「余り」が役立ちます。なぜなのか、どう使うのかをこのページで徹底解説します。今すぐチェックしましょう!
基本
まずは商と余りの基本を確認してみよう。
今2000円持っている。りんご(130円)を買えるだけ買った場合の個数と余ったお金を求めよ
[実行例]
15個買えて50円残りました。
public class Main{
public static void main(String[] args){
System.out.println(2000/130 + "個買えて" + 2000%130 +"円余りました");
}
}
このような場合に使うのが、/
(割り算)演算子と%
(余り)演算子だ。
ポイントは、int
型同士の割り算では小数点以下が切り捨てられること。これにより、2000 / 130
は商(買える個数)を求めることができる。一方、2000 % 130
は割り切れなかった余りを返すため、残ったお金を計算するのに使える。
商と余りを使いこなせば、プログラミングの幅が広がる。まずはこの基本をしっかり押さえておこう!
例題
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
コメント